From cf340db8a3c5c9b8893c5c01a1c10c5b4fd2b56e Mon Sep 17 00:00:00 2001 From: aragonc Date: Fri, 15 May 2015 18:03:35 -0500 Subject: [PATCH 01/13] fix forum template CT#7539 #TMI --- main/forum/forumfunction.inc.php | 52 ++++++++++++++++------- main/forum/index.php | 72 ++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+), 15 deletions(-) diff --git a/main/forum/forumfunction.inc.php b/main/forum/forumfunction.inc.php index c4951d28d8..cbbb99e621 100755 --- a/main/forum/forumfunction.inc.php +++ b/main/forum/forumfunction.inc.php @@ -950,25 +950,37 @@ function check_if_last_post_of_thread($thread_id) */ function display_visible_invisible_icon($content, $id, $current_visibility_status, $additional_url_parameters = '') { + echo return_visible_invisible_icon($content, $id, $current_visibility_status, $additional_url_parameters); +} +/** + * @param $content what is it that we want to make (in)visible: forum category, forum, thread, post + * @param $id the id of the content we want to make invisible + * @param $current_visibility_status what is the current status of the visibility (0 = invisible, 1 = visible) + * @return string HTML + */ +function return_visible_invisible_icon($content, $id, $current_visibility_status, $additional_url_parameters = '') +{ + $html = ''; $id = Security::remove_XSS($id); if ($current_visibility_status == '1') { - echo ' $value) { - echo $key.'='.$value.'&'; + $html .= $key . '=' . $value . '&'; } } - echo 'action=invisible&content='.$content.'&id='.$id.'">'.Display::return_icon('visible.png', get_lang('MakeInvisible'), array(), ICON_SIZE_SMALL).''; + $html.='action=invisible&content='.$content.'&id='.$id.'">'.Display::return_icon('visible.png', get_lang('MakeInvisible'), array(), ICON_SIZE_SMALL).''; } if ($current_visibility_status == '0') { - echo ' $value) { - echo $key.'='.$value.'&'; + $html .= $key . '=' . $value . '&'; } } - echo 'action=visible&content='.$content.'&id='.$id.'">'.Display::return_icon('invisible.png', get_lang('MakeVisible'), array(), ICON_SIZE_SMALL).''; + $html .= 'action=visible&content=' . $content . '&id=' . $id . '">' . Display::return_icon('invisible.png', get_lang('MakeVisible'), array(), ICON_SIZE_SMALL) . ''; } + return $html; } /** @@ -984,33 +996,39 @@ function display_visible_invisible_icon($content, $id, $current_visibility_statu */ function display_lock_unlock_icon($content, $id, $current_lock_status, $additional_url_parameters = '') { + echo return_lock_unlock_icon($content, $id, $current_lock_status, $additional_url_parameters); +} +function return_lock_unlock_icon($content, $id, $current_lock_status, $additional_url_parameters = '') +{ + $html = ''; $id = intval($id); //check if the forum is blocked due if ($content == 'thread') { if (api_resource_is_locked_by_gradebook($id, LINK_FORUM_THREAD)) { - echo Display::return_icon('lock_na.png', get_lang('ResourceLockedByGradebook'), array(), ICON_SIZE_SMALL); + $html .= Display::return_icon('lock_na.png', get_lang('ResourceLockedByGradebook'), array(), ICON_SIZE_SMALL); - return; + return $html; } } if ($current_lock_status == '1') { - echo ' $value) { - echo $key.'='.$value.'&'; + $html .= $key . '=' . $value . '&'; } } - echo 'action=unlock&content='.$content.'&id='.$id.'">'.Display::return_icon('lock.png', get_lang('Unlock'), array(), ICON_SIZE_SMALL).''; + $html.= 'action=unlock&content='.$content.'&id='.$id.'">'.Display::return_icon('lock.png', get_lang('Unlock'), array(), ICON_SIZE_SMALL).''; } if ($current_lock_status == '0') { - echo ' $value) { - echo $key.'='.$value.'&'; + $html .= $key . '=' . $value . '&'; } } - echo 'action=lock&content='.$content.'&id='.$id.'">'.Display::return_icon('unlock.png', get_lang('Lock'), array(), ICON_SIZE_SMALL).''; + $html .= 'action=lock&content=' . $content . '&id=' . $id . '">' . Display::return_icon('unlock.png', get_lang('Lock'), array(), ICON_SIZE_SMALL) . ''; } + return $html; } /** @@ -1027,6 +1045,10 @@ function display_lock_unlock_icon($content, $id, $current_lock_status, $addition * @version february 2006, dokeos 1.8 */ function display_up_down_icon($content, $id, $list) +{ + echo return_up_down_icon($content, $id, $list); +} +function return_up_down_icon($content, $id, $list) { $id = strval(intval($id)); $total_items = count($list); @@ -1056,7 +1078,7 @@ function display_up_down_icon($content, $id, $list) } else { $return_value .= Display::return_icon('down_na.png', '-', array(), ICON_SIZE_SMALL); } - echo $return_value; + return $return_value; } /** diff --git a/main/forum/index.php b/main/forum/index.php index 8ff98443dd..df6805e8eb 100755 --- a/main/forum/index.php +++ b/main/forum/index.php @@ -263,6 +263,78 @@ if (is_array($forumCategories)) { $forumCategory['cat_title'] = get_lang('WithoutCategory'); } + + $html = ''; + $iconsEdit = ''; + $idCategory = $forumCategory['cat_id']; + $urlCategory = 'viewforumcategory.php?'.api_get_cidreq().'&forumcategory='.intval($idCategory); + $titleCategory = $forumCategory['cat_title']; + $descriptionCategory = $forumCategory['cat_comment']; + + if(!empty($idCategory)){ + if(api_is_allowed_to_edit(false,true) && !($forumCategory['session_id'] == 0 && intval($sessionId) != 0)){ + $iconsEdit.= ' + '.Display::return_icon( + 'edit.png', + get_lang('Edit'), + array(), + ICON_SIZE_SMALL + ).''; + $iconsEdit.='".Display::return_icon( + 'delete.png', + get_lang('Delete'), + array(), + ICON_SIZE_SMALL + ).''; + $iconsEdit.= return_visible_invisible_icon( + 'forumcategory', + strval(intval($idCategory)), + strval(intval($forumCategory['visibility'])) + ); + $iconsEdit .= return_lock_unlock_icon( + 'forumcategory', + strval(intval($$idCategory)), + strval(intval($forumCategory['locked'])) + ); + $iconsEdit .= return_up_down_icon( + 'forumcategory', + strval(intval($idCategory)), + $forumCategories + ); + } + } + + $html .= '
' . + Display::tag( + 'a', + Display::tag( + 'h3', + $titleCategory . Display::tag('div',$iconsEdit), + null + ), + array('href' => $urlCategory,'class' => class_visible_invisible($forumCategory['visibility'])) + ); + if ($descriptionCategory != '' && trim($descriptionCategory)!= ' ') + { + $html .= '
'.$descriptionCategory.'
'; + } + + $html .= '
'; + echo $html; + + + echo ''; echo ''; echo ''; - */ // Validation when belongs to a session $session_img = api_get_session_image( $forum['session_id'], @@ -504,13 +527,13 @@ if (is_array($forumCategories)) { $html .= '
'; $html .= '
'; $html .= '
'; - $html .= '
' . $number_posts . '

' . get_lang('Posts') . '

'; + $html .= '
'.$forum_image .'

' . $number_posts . ' ' . get_lang('Posts') . '

'; $html .= '
'; $html .= '
'; $iconForum = Display::return_icon('forum_yellow.png', get_lang($forumCategory['cat_title']), - array('class'=>''), + null, ICON_SIZE_MEDIUM ); $linkForum = ''; @@ -520,7 +543,7 @@ if (is_array($forumCategories)) { array ('href'=>'viewforum.php?' . api_get_cidreq( ).'&gidReq=' . intval($groupid).'&forum=' . intval( $forum['forum_id'] - ),'class' => class_visible_invisible( strval( intval($forum['visibility']) ) ) ) + ),'class' => status_visible_invisible( strval( intval($forum['visibility']) ) ) ) ); $html .= '

' . $iconForum . $linkForum . '

'; @@ -539,6 +562,37 @@ if (is_array($forumCategories)) { $html .= '
'; // The number of topics and posts. + if ($forum['forum_of_group'] !== '0') { + $iconEmpty=''; + $newPost=''; + if (is_array( + $mywhatsnew_post_info + ) && !empty($mywhatsnew_post_info) + ) { + $newPost .= ' '.Display::return_icon( + 'alert.png', + get_lang('Forum'), + null, + ICON_SIZE_SMALL + ); + } else { + $newPost .= $iconEmpty; + } + } else { + if (is_array( + $mywhatsnew_post_info + ) && !empty($mywhatsnew_post_info) + ) { + $newPost .= ' '.Display::return_icon( + 'alert.png', + get_lang('Forum'), + null, + ICON_SIZE_SMALL + ); + } else { + $newPost .= $iconEmpty; + } + } $html .= '
'; $html .= '
'; @@ -547,7 +601,7 @@ if (is_array($forumCategories)) { null, null, ICON_SIZE_SMALL - ) . ' ' . $number_threads . '
'; + ) . ' ' . $number_threads . '
'.$newPost.'
'; $html .= '
'; // The last post in the forum. @@ -659,6 +713,7 @@ if (is_array($forumCategories)) { ) . ''; } + $html .= '
'; $html .= '
'; $html .= '
'; diff --git a/main/img/icons/22/notification_mail.png b/main/img/icons/22/notification_mail.png index ed63fab3c1fd58dd119ab4b55aa091a8707d7886..f664c6f9a0beacb27576c979405e6fb84009b556 100644 GIT binary patch delta 751 zcmV1n zy?bnef6(6Ep2|7@0N_m+h8ap}GYEo@rBdm~Xbo8udU$yFI)4nqFJTyF9`Z{Q53!6oPS=}alKxz`M&>rT5n}#1%_du(P+e!(ie|*d~|e_ z9SjDgSx_Ma+U@qp?7I{I?Ck8=k|bs4fgQ(rlFep`rfCpDpw((2ilPL1a&m%xzYhQ) zgxF+vclZ6))_>L~Ns=T@(`JH$AV8zh03ig$ViA;5bUGbamNf7YYRcKpe+7 zJ3B+O*@W-=V{2qtMi2x)#|}@^G;q#Quh$XB@dTK24u2s;0v`+pWBpVr1^70Z<6d{wD`aPNs?smJly}gBLnn^96&m*7DC-0_d zqSNW%?(PnZu?fb+j2*{8zu!kLmz%lGk#e~l7-(bgJa0bu{QNwYBx$OHSz?Sq*LB?7 z+>9lP4)0UYZntAqRY^LXel&EXbUFA$r?qV-&Y`iSSfN=tbl9Y{XN)y_u zNbSK@+e0tC^a>xLAEc@xaYXb`B&UiJ2$T>DwM4C=s!~)bhp3TSrThsYCMC8p%^G`V zd#JEPY~0ZPq&dv{&OGzJqu-3ef6&a#%$Z;?__>tw6Cs3ORe#lA4-O8#n3|fpd$dM5 zEp%>f?&ET~e7#bs_+QQ$hOsP!_;hk|()FDNIy*ai(RJOMji3NRh>v_e-`uGy&SWz8 z3WdTOjdG6TFf=s8{QSHprM#@ZDs*~!+7v=u@jOpal;ia{jzcPyBAdgBQ*F^zHn(&5 z{VfegC=|r9EQAnbvsn%g4;w-O0!G_z%@tOAh%;s@_kZp`JhAH0(NO@Tl&r3;7^d~$nB8nEM0dpE&fQ;-(yId}5($#YWDQ;_m5${N!(eP|3`J37osYXZEd~c- ztbG3yhm}ele0+SIbUKY?S+$s^X~g4kCMG5@&3`jmo0eW%Zo-jxRkoUjpaK$+soJD&-43STl@|?Z1UPbFS@SR zL7RdBV%?p*{pLlkFaN;$)(%@wcDeTL8l85C3xj>lwl=~`F8g@9i_Jvd)1vHc{+;JF?E-n}%!AAeg<86Q25q9|-U&QTQtvo-MQ;N3s- z6!%NSdn2`2Z`7tYYS-rR-Uzv8d7c+bgoE|JLERm1Za?L)T&BxzKe5dtMeKIW);4zc zip{|fe_!_kx<)A2_OH+*g@SEF>@bga_Kv+MpA@nRaR0$?UROuEVi*no@TM{Xe)`XL zD?X35avp$?vZ`G9>PF&xf8Q-l_0IYl8S)g89$x9-uZ{JMoe%yGr>Xu1H&`C4_XH`l P00000NkvXXu0mjfL*1b) From a1940bf78b27c11b9f7b288afb9ed32f1a0d463e Mon Sep 17 00:00:00 2001 From: aragonc Date: Mon, 18 May 2015 19:07:50 -0500 Subject: [PATCH 06/13] update fix icons notifications --- main/forum/index.php | 4 ++-- main/img/icons/128/alert.png | Bin 0 -> 4356 bytes main/img/icons/128/forum_group.png | Bin 0 -> 20030 bytes main/img/icons/128/notification_mail.png | Bin 0 -> 6003 bytes main/img/icons/128/notification_mail_na.png | Bin 0 -> 4931 bytes main/img/icons/22/alert.png | Bin 0 -> 702 bytes main/img/icons/22/notification_mail.png | Bin 848 -> 976 bytes main/img/icons/22/notification_mail_na.png | Bin 0 -> 848 bytes main/img/icons/32/notification_mail.png | Bin 0 -> 1411 bytes main/img/icons/32/notification_mail_na.png | Bin 0 -> 1227 bytes main/img/icons/48/forum_group.png | Bin 0 -> 4408 bytes main/img/icons/64/notification_mail.png | Bin 0 -> 2955 bytes main/img/icons/64/notification_mail_na.png | Bin 0 -> 2526 bytes 13 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 main/img/icons/128/alert.png create mode 100644 main/img/icons/128/forum_group.png create mode 100644 main/img/icons/128/notification_mail.png create mode 100644 main/img/icons/128/notification_mail_na.png create mode 100644 main/img/icons/22/alert.png create mode 100644 main/img/icons/22/notification_mail_na.png create mode 100644 main/img/icons/32/notification_mail.png create mode 100644 main/img/icons/32/notification_mail_na.png create mode 100644 main/img/icons/48/forum_group.png create mode 100644 main/img/icons/64/notification_mail.png create mode 100644 main/img/icons/64/notification_mail_na.png diff --git a/main/forum/index.php b/main/forum/index.php index 0b223afc25..033c3fed12 100755 --- a/main/forum/index.php +++ b/main/forum/index.php @@ -688,7 +688,7 @@ if (is_array($forumCategories)) { $forumsInCategory ); } - $iconnotify = 'notification_mail.png'; + $iconnotify = 'notification_mail_na.png'; $session_forum_notification = isset($_SESSION['forum_notification']['forum']) ? $_SESSION['forum_notification']['forum'] : false; if (is_array($session_forum_notification)) { @@ -696,7 +696,7 @@ if (is_array($forumCategories)) { $forum['forum_id'], $session_forum_notification )) { - $iconnotify = 'notification_mail_ok.png'; + $iconnotify = 'notification_mail.png'; } } diff --git a/main/img/icons/128/alert.png b/main/img/icons/128/alert.png new file mode 100644 index 0000000000000000000000000000000000000000..d96f4bf4f618cb5363baefd0b9977b6a51d55e89 GIT binary patch literal 4356 zcmV+f5&Q0mP)O zmWo(>>JG@hFA9RlqR3Xo4ciC0rM5_I6{yfsD@CNDXcdrs5dj61Jqy`x|9CTIlFUqI z?!B{R?&o>(keRvXy(e?O+mjea{1_lNO1_lNZhbh<{FsO<$j3}b91CUCAX%+eY zI+r1UAfvRvP67jor4Lrx5ldTQiN^}Wmi<^MA(rFBvX?kMCXNlJDIC}1{DuI6gi?#amH*)*DiTKZwu(%3*9N^P1F&3}Pe$R$-nU!wRz$>Dx2 zeK7FtY=N<~o>*LE-nx1_rA&UGd5so2%2*(gWgkuOG!Z8F8;TQsla0~%NIEDZs976yRjv;^u#}Gh- zV+bI^F$54uO#Tb+1`190QRr(ULjZy0VyM|R1Q19{`N5CYzgN@95I|r#8fvx;0R)!A zezUA_NKG?C0DG9{9%Crw9?TR`N-Io; zSajhZ)Z?-r>~3bgGOEJer4$o~QLq5-VPlP}EaNIM>dK>}Vd3vUJAh+JUAbUucD?i2 zKgU{13w;hcG^oVq$Z*ZO1kma~iv>!6o#m$}GFyxHqzx^on|Csy#l>BYxAy{lO>gk6 zb9X9SPz6j_*Z{P{Vu7ARXr9%RhHb`#Z49<;R^m%7P_F^>8xGT!LTnts9gHN)xoPF+dKUnC4uW=>xERew!r}~Zv}>pg$9kB&e;M6Jt)7MxXrm~WdS4rkkzZ| zNm9~a>QXpX2eu>69RuHqM&I0Ehs|BUM-~|QB;4Gw>M^(X0<#&Qmh;=LNA@Xcu1}Pb z22-DdbIGs;xS^%j5lmAZZJB@_z=*_tpeb<34T5aGO|4%YpHr&)y?heH-brvpvVq?1um$v61k-7XzMa?-zezT zTUB%Qi#rXQ!jvUow!Ti6gH$)ywz}7_nTQ~!mdtPWYqAzO)JJ`3 zsLEsw)zn=3@@}It5yaP$)u>$<)5Pj91C6RZ$~zL9Xlky{`hKJ4Fn$5V#>;}^HlSD+ z%QY8m*G-7AL3}+;CiHXgG;0l$7Rrj#31nR0&j`41CtU{{N!pF*>)~tG1|}{N5u8V6 z2>$SV)dcjo10<(wHle?Zw|N_w@GMy4WR2h*sOWz(0Q3<+l6E8h@$t842NM>6HC9#& z{{|fK%bCKLBq*x~uE9pS=5F{e$fIR@81pnl$B5tH1H_SJP>$A_Ku8M!pv|o?cAkhp zK?JZJDD~@E!-vKi+S=-XH9>P1{2%7kHbd?NmNK8^A>cjmJ%^C)6aia-uL9na;PEx(E2TCS?M-G#*7E!)CpfYG z8F#>AGs{Jw03Q+=j->sF=d`HowHg5=r9o6o^~ZTZ@RB_`cZUZjfypT~!Qn`%iSdRC zBJiD56uDi+_5t-(Rfcy-aI<}~dclK}D~g~dI+BVJVefVE*&~lYEgx?KH{Yp4r-b0A zdv)tA@odf_IETy-t^})7I+BkF`h<(m`ri)&?uDt3SN!`u(JBj?bgxQr}%xeA=^J+wSle{f$&tOYr5!s+9<90=KyA-f;kH5@&6 zoe2#A0Nl|R@~*+3*OtF`1DPuIKp*c}AUTiBZd^Uey4(#veXQbpcXyMYt5@OjCAfYS zlwz>kA;Atw+5$h^5jp|@=yNYbMZ@|vQVvxj=V9d&Ap3z-PFg&UUy>F1|VVLoWxRCjfw6Lu4$l z;a3&kKZy7bdV^ng-%&#;lA+_SP)n;0F#0LaNjE_tw0h%A@1b%ha2^u?oJKN|?m^um zia#g>{((5TT#?=i#?2SExF?RCfL$NK;r)<%5u%ErZXz^p47X%K%Ug99Q0NK(WK3}5 z25icy`2G*b4B;N2P7wO#%ynd>f62|~X-#0_vl21wj^n4`m9?;Echw>gSI)xeui&#S zkd_90AA&aBb?biUJdE7&e-FrfxiY!Po#2~5cgTtF5h1#}_>MeEn}{de~P*sVh*ZAl><`l}`r z;U@r-35Jh`y9c`d+#il4PYxXi(J?UgX-Sc*j(2wG)G^@HhiG~Bg`WUGL~#EYxNCsx z෡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 Z{s&@%%L2G86CwZr002ovPDHLkV1nSg#PI+C literal 0 HcmV?d00001 diff --git a/main/img/icons/128/notification_mail.png b/main/img/icons/128/notification_mail.png new file mode 100644 index 0000000000000000000000000000000000000000..520730bc5e62cf15400cbbdd0ece046afdc1179d GIT binary patch literal 6003 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 literal 0 HcmV?d00001 diff --git a/main/img/icons/22/alert.png b/main/img/icons/22/alert.png new file mode 100644 index 0000000000000000000000000000000000000000..2454d1e6913994479f22fe6f587c008e000406bb GIT binary patch literal 702 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 RsOSIy002ovPDHLkV1nkwni>EA literal 0 HcmV?d00001 diff --git a/main/img/icons/32/notification_mail_na.png b/main/img/icons/32/notification_mail_na.png new file mode 100644 index 0000000000000000000000000000000000000000..1548d03061b5eec73b0255e546bf758ec601979b GIT binary patch literal 1227 zcmV;+1T_1JP)#oR4KhhC`bfB1SCo@aWFWcaZJG&78}p>keb#38@pKj z-FD~Q`91T_pLbR;WUZ{ML>i687rL&0rfFJSO1UqkTnPjMzuvrgbLZoDF)U-Hlz95| z=?|?|>qjYN=$w%dQV8*r@B821xpSvFRDi|BMZ++R-6auTJ~6mV}S0J^T<>nF~2 zT|Cbt7!0Cm8bXNg*4EbSE3JV?j~+SUaQIK9RL_AVlSwj}47FN~jg1YYl$_BbiL1X&T$x+W;gI ziC*RacHqH-2Z@=PnV&~TM}=V+T)Wmk!^z1BtE;O3lu9LZUB`7@lu|Sr4YJv6FLPS0 z)R1EucpOdBC=?2PXW`?Fl}aV5)he}Gjm^!?uI9R~Q>)cB&Mm@tJWeDMVSRnQ>&O3= z>$(I2fwO0&6vbk(Yuei~O%v#H4kQu@qR}WzOG~s`t)2jZK!B;KDTMfEM=Paznmdkj z2HkZVx~@wqmE!T^$7gfgtHasZ*^W$HBq0PNBO^GDbM~(1Igm=Fn4Fwsetw?A!^57P z+qTWz+#Kn28pAL;+B8kWvMdsb1h#E=wDm^*8$v0?{QNw(Z{H>si*=3Fb)8Ts#M`%T zi9{k~G8r^YYahKAesd`Rd?+GPN){Ft$mjEnkB?s%S1y-XUS7s=9CEo_SJQz30LI71 zQA)AAyiC1bXLfeBqrFfl@a)+$9LG7gD2D<7FflQKQi`>;HGJRa#*G^Qtgo;0>eVYO z%VK(Z8cplJ#0&(Wl;ZgKm~1x7>({SoHk$|`D3{BG!(pP)=s@NJ0Z1u%@!|!^WRhSo zh_35wZf*h)3Wdn$^9Ui>+S($OO7%Sjec_&-p7Q+p^Ro*Dd{`6H)6;B7^FR^W#Q0UyB)s+6b(q6S%9WhN)zpUzARkm%jySv*uK0ZFMENfQ)Jbd_Y?C9ud?y`D5 pES;X7Vp-Pe-Me?s&&mI-zW^#+s|9a>+T#EK002ovPDHLkV1mMMJ5~Sy literal 0 HcmV?d00001 diff --git a/main/img/icons/48/forum_group.png b/main/img/icons/48/forum_group.png new file mode 100644 index 0000000000000000000000000000000000000000..7742046eae7137ee8fe7f4f9332dd8de38ae496a GIT binary patch literal 4408 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 literal 0 HcmV?d00001 From bdf170853aaff18b53bb0655c440cd107be8c45a Mon Sep 17 00:00:00 2001 From: Alex Aragon Date: Mon, 18 May 2015 21:26:11 -0500 Subject: [PATCH 07/13] fix bug notifications icons forum #TMI --- main/forum/index.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/main/forum/index.php b/main/forum/index.php index 033c3fed12..9dcb78af98 100755 --- a/main/forum/index.php +++ b/main/forum/index.php @@ -268,7 +268,7 @@ if (is_array($forumCategories)) { $iconsEdit = ''; $idCategory = $forumCategory['cat_id']; $urlCategory = 'viewforumcategory.php?'.api_get_cidreq().'&forumcategory='.intval($idCategory); - $titleCategory .= Display::tag( + $titleCategory = Display::tag( 'a', $forumCategory['cat_title'], array('href' => $urlCategory,'class' => status_visible_invisible($forumCategory['visibility'])) ); @@ -569,28 +569,28 @@ if (is_array($forumCategories)) { $mywhatsnew_post_info ) && !empty($mywhatsnew_post_info) ) { - $newPost .= ' '.Display::return_icon( + $newPost = ' '.Display::return_icon( 'alert.png', get_lang('Forum'), null, ICON_SIZE_SMALL ); } else { - $newPost .= $iconEmpty; + $newPost = $iconEmpty; } } else { if (is_array( $mywhatsnew_post_info ) && !empty($mywhatsnew_post_info) ) { - $newPost .= ' '.Display::return_icon( + $newPost = ' '.Display::return_icon( 'alert.png', get_lang('Forum'), null, ICON_SIZE_SMALL ); } else { - $newPost .= $iconEmpty; + $newPost = $iconEmpty; } } @@ -728,7 +728,7 @@ if (is_array($forumCategories)) { } } } else { - echo '
'.get_lang( + echo '
'.get_lang( 'NoForumInThisCategory' ).'
'.(api_is_allowed_to_edit( false, From 65dd2425e9947e883a520dd05a1b3e8bf0274ac1 Mon Sep 17 00:00:00 2001 From: Alex Aragon Date: Mon, 18 May 2015 23:01:20 -0500 Subject: [PATCH 08/13] fix view category forum CT#7539 #TMI --- main/forum/index.php | 43 +----- main/forum/viewforumcategory.php | 254 ++++++++++++++++++++++++------- 2 files changed, 202 insertions(+), 95 deletions(-) diff --git a/main/forum/index.php b/main/forum/index.php index 9dcb78af98..f004858c5d 100755 --- a/main/forum/index.php +++ b/main/forum/index.php @@ -404,6 +404,7 @@ if (is_array($forumCategories)) { $form_count++; $mywhatsnew_post_info = isset($whatsnew_post_info[$forum['forum_id']]) ? $whatsnew_post_info[$forum['forum_id']] : null; + $html = '
'; $html .= '
'; @@ -448,48 +449,6 @@ if (is_array($forumCategories)) { } } - - /* - if ($forum['forum_of_group'] !== '0') { - if (is_array( - $mywhatsnew_post_info - ) && !empty($mywhatsnew_post_info) - ) { - $forum_image = Display::return_icon( - 'forumgroupnew.gif' - ); - } else { - $forum_image = Display::return_icon( - 'forum_group.png', - get_lang('GroupForum'), - null, - ICON_SIZE_LARGE - ); - } - } else { - if (is_array( - $mywhatsnew_post_info - ) && !empty($mywhatsnew_post_info) - ) { - $forum_image = Display::return_icon( - 'forum.png', - get_lang('Forum'), - null, - ICON_SIZE_LARGE - ); - } else { - $forum_image = Display::return_icon( - 'forumx.png', - get_lang('Forum'), - null, - ICON_SIZE_LARGE); - } - } - */ - - - - // Validation when belongs to a session $session_img = api_get_session_image( $forum['session_id'], diff --git a/main/forum/viewforumcategory.php b/main/forum/viewforumcategory.php index c9e09401d5..38c700d58d 100755 --- a/main/forum/viewforumcategory.php +++ b/main/forum/viewforumcategory.php @@ -97,16 +97,18 @@ if (!api_is_allowed_to_edit(false,true) AND ($current_forum_category && $current } /* Action Links */ -echo ''; /* ACTIONS */ +echo $html; $action_forums = isset($_GET['action']) ? $_GET['action'] : ''; if (api_is_allowed_to_edit(false, true)) { @@ -154,7 +156,12 @@ if ($action_forums != 'add') { /* Display Forum Categories and the Forums in it */ - echo '
'; From a4640efab38192d3291fa34ae3513ad66e8dbc06 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Mon, 18 May 2015 09:43:36 +0200 Subject: [PATCH 02/13] Add intvals + format code. --- main/inc/lib/SequenceManager.php | 145 ++++++++++++++++++++----------- 1 file changed, 92 insertions(+), 53 deletions(-) diff --git a/main/inc/lib/SequenceManager.php b/main/inc/lib/SequenceManager.php index 7f848cf474..724069e305 100644 --- a/main/inc/lib/SequenceManager.php +++ b/main/inc/lib/SequenceManager.php @@ -17,7 +17,7 @@ class SequenceManager if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } - $row_entity_id = intval(Database::escape_string($row_entity_id)); + $row_entity_id = intval($row_entity_id); if ($row_entity_id > 0) { $seq_table = Database::get_main_table(TABLE_MAIN_SEQUENCE); $sql = "SELECT sequence_row_entity_id FROM $seq_table @@ -88,7 +88,7 @@ class SequenceManager if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } - $entity_id = Database::escape_string($entity_id); + $entity_id = intval($entity_id); if (is_numeric($entity_id)) { $entity_id = intval($entity_id); $ety_table = Database::get_main_table(TABLE_SEQUENCE_TYPE_ENTITY); @@ -156,12 +156,13 @@ class SequenceManager if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } - $rule_id = Database::escape_string($rule_id); + $rule_id = intval($rule_id); if (is_numeric($rule_id)) { $rule_id = intval($rule_id); $con_table = Database::get_main_table(TABLE_SEQUENCE_CONDITION); $rul_con_table = Database::get_main_table(TABLE_SEQUENCE_RULE_CONDITION); - $sql = "SELECT rc.sequence_condition_id FROM $rul_con_table rc WHERE rc.sequence_rule_id = $rule_id"; + $sql = "SELECT rc.sequence_condition_id FROM $rul_con_table rc + WHERE rc.sequence_rule_id = $rule_id"; $sql = "SELECT * FROM $con_table co WHERE co.id IN ($sql)"; $result = Database::query($sql); if (Database::num_rows($result) > 0) { @@ -186,7 +187,7 @@ class SequenceManager if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } - $rule_id = Database::escape_string($rule_id); + $rule_id = intval($rule_id); if (is_numeric($rule_id)) { $rule_id = intval($rule_id); $met_table = Database::get_main_table(TABLE_SEQUENCE_METHOD); @@ -219,7 +220,7 @@ class SequenceManager if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } - $row_entity_id = intval(Database::escape_string($row_entity_id)); + $row_entity_id = intval($row_entity_id); if ($row_entity_id > 0) { $val_table = Database::get_main_table(TABLE_SEQUENCE_VALUE); $sql = "SELECT * FROM $val_table val @@ -246,7 +247,7 @@ class SequenceManager if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } - $condition_id = Database::escape_string($condition_id); + $condition_id = intval($condition_id); if (is_numeric($condition_id)) { $condition_id = intval($condition_id); $var_table = Database::get_main_table(TABLE_SEQUENCE_VARIABLE); @@ -291,6 +292,7 @@ class SequenceManager error_log('Entering '.__FUNCTION__.' in '.__FILE__); } $value = self::get_value_by_user_id($row_entity_id, $user_id, $session_id, $available); + $met_type = Database::escape_string($met_type); if ($value !== false) { if (empty($met_type)) { $met_filter = " AND met.met_type NOT IN ('success', 'pre', 'update') "; @@ -370,7 +372,7 @@ class SequenceManager if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } - $user_id = (isset($user_id))? intval(Database::escape_string($user_id)) : api_get_user_id(); + $user_id = (isset($user_id))? intval($user_id) : api_get_user_id(); if ($user_id > 0) { $available = Database::escape_string($available); $available = (is_numeric($available))? intval($available) : -1; @@ -402,10 +404,16 @@ class SequenceManager } $val_table = Database::get_main_table(TABLE_SEQUENCE_VALUE); $sql = "SELECT * FROM $val_table - WHERE user_id = $user_id $available_filter $success_filter $row_entity_filter $session_filter"; + WHERE + user_id = $user_id + $available_filter + $success_filter + $row_entity_filter + $session_filter + "; $result = Database::query($sql); if (Database::num_rows($result) > 0) { - while($temp_value = Database::fetch_array($result,'ASSOC')){ + while($temp_value = Database::fetch_array($result,'ASSOC')) { $value[] = $temp_value; } @@ -448,14 +456,15 @@ class SequenceManager if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } - $row_entity_id = intval(Database::escape_string($row_entity_id)); + $row_entity_id = intval($row_entity_id); if ($row_entity_id > 0) { $row_entity_filter = "WHERE sequence_row_entity_id = $row_entity_id"; } else { $row_entity_filter = ''; } $val_table = Database::get_main_table(TABLE_SEQUENCE_VALUE); - $sql = "SELECT DISTINCT user_id, session_id FROM $val_table $row_entity_filter"; + $sql = "SELECT DISTINCT user_id, session_id + FROM $val_table $row_entity_filter"; $result = Database::query($sql); if (Database::num_rows($result) > 0) { while ($temp_user = Database::fetch_array($result, 'ASSOC')) { @@ -482,9 +491,9 @@ class SequenceManager if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } - $user_id = intval(Database::escape_string($user_id)); - $session_id = intval(Database::escape_string($session_id)); - $row_entity_id = intval(Database::escape_string($row_entity_id)); + $user_id = intval($user_id); + $session_id = intval($session_id); + $row_entity_id = intval($row_entity_id)); $seq_table = Database::get_main_table(TABLE_MAIN_SEQUENCE); $val_table = Database::get_main_table(TABLE_SEQUENCE_VALUE); $sql = "SELECT DISTINCT seq.sequence_row_entity_id, val.user_id @@ -533,7 +542,17 @@ class SequenceManager if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } - if (self::execute_formulas_by_user_id($row_entity_id, $user_id, $session_id, 'success', 1, null, null, null)) { + if (self::execute_formulas_by_user_id( + $row_entity_id, + $user_id, + $session_id, + 'success', + 1, + null, + null, + null + ) + ) { $seq_table = Database::get_main_table(TABLE_MAIN_SEQUENCE); $value = self::get_value_by_user_id($row_entity_id, $user_id, $session_id, 1, 1); //$check_array = []; Update later @@ -547,7 +566,12 @@ class SequenceManager $next[] = $temp_next['sequence_row_entity_id_next']; } foreach ($next as $nx) { - self::action_pre_init($nx, $user_id, $session_id, $available_end_date); + self::action_pre_init( + $nx, + $user_id, + $session_id, + $available_end_date + ); } } } @@ -563,9 +587,9 @@ class SequenceManager if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } - $row_id = intval(Database::escape_string($row_id)); - $entity_id = intval(Database::escape_string($entity_id)); - $c_id = intval(Database::escape_string($c_id)); + $row_id = intval($row_id); + $entity_id = intval($entity_id); + $c_id = intval($c_id)); $row_entity_id_prev = self::get_row_entity_id_by_row_id($entity_id, $row_id, $c_id); @@ -601,9 +625,9 @@ class SequenceManager if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } - $row_id = intval(Database::escape_string($row_id)); - $entity_id = intval(Database::escape_string($entity_id)); - $c_id = intval(Database::escape_string($c_id)); + $row_id = intval($row_id); + $entity_id = intval($entity_id); + $c_id = intval($c_id); if ($row_id > 0 && $entity_id > 0 && $c_id > 0) { $row_table = Database::get_main_table(TABLE_SEQUENCE_ROW_ENTITY); $sql = "SELECT row.* @@ -611,7 +635,8 @@ class SequenceManager WHERE row.sequence_type_entity_id = $entity_id AND row.row_id = $row_id AND - row.c_id = $c_id LIMIT 0, 1"; + row.c_id = $c_id + LIMIT 0, 1"; $result = Database::query($sql); if (Database::num_rows($result) > 0) { @@ -633,9 +658,9 @@ class SequenceManager if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } - $row_entity_id = intval(Database::escape_string($row_entity_id)); - $user_id = intval(Database::escape_string($user_id)); - $session_id = intval(Database::escape_string($session_id)); + $row_entity_id = intval($row_entity_id); + $user_id = intval($user_id); + $session_id = intval($session_id); if ($row_entity_id > 0 && $user_id > 0 && $session_id >= 0) { $val_table = Database::get_main_table(TABLE_SEQUENCE_VALUE); @@ -666,9 +691,9 @@ class SequenceManager break; } } - //Val row starts not available + // Val row starts not available } else { - //Val row starts available + // Val row starts available $available = 1; } return self::temp_hack_4_insert(1, $row_entity_id, $user_id, $available, $session_id); @@ -693,9 +718,9 @@ class SequenceManager error_log('row_id: '.$row_id.'...................'); error_log('c_id: '.$c_id.'.......................'); } - $row_id = intval(Database::escape_string($row_id)); - $entity_id = intval(Database::escape_string($entity_id)); - $c_id = intval(Database::escape_string($c_id)); + $row_id = intval($row_id); + $entity_id = intval($entity_id); + $c_id = intval($c_id); $name = Database::escape_string($name); if ($row_id > 0 && $entity_id > 0 && $c_id > 0) { $row_table = Database::get_main_table(TABLE_SEQUENCE_ROW_ENTITY); @@ -817,7 +842,8 @@ class SequenceManager $ety_table = Database::get_main_table(TABLE_SEQUENCE_TYPE_ENTITY); $sql = "SELECT ety.ent_table FROM $ety_table ety - WHERE ety.name = $entity_name LIMIT 0, 1"; + WHERE ety.name = $entity_name + LIMIT 0, 1"; $result = Database::query($sql); if (Database::num_rows($result) > 0) { while ($temp_entity = Database::fetch_array($result, 'ASSOC')) { @@ -894,7 +920,7 @@ class SequenceManager if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } - $is_part = intval(Database::escape_string($is_part)); + $is_part = intval($is_part); $seq_table = Database::get_main_table(TABLE_MAIN_SEQUENCE); $prev = self::get_row_entity_id_by_row_id($entity_id_prev, $row_id_prev, $c_id); $next = self::get_row_entity_id_by_row_id($entity_id_next, $row_id_next, $c_id); @@ -922,10 +948,10 @@ class SequenceManager if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } - $user_id = intval(Database::escape_string($user_id)); - $session_id = intval(Database::escape_string($session_id)); - $total_items = intval(Database::escape_string($total_items)); - $available = intval(Database::escape_string($available)); + $user_id = intval($user_id)); + $session_id = intval($session_id); + $total_items = intval($total_items); + $available = intval($available); if ($available === -1) { $pre_req = self::get_pre_req_id_by_row_entity_id($row_entity_id); @@ -960,7 +986,8 @@ class SequenceManager } $table = Database::get_main_table(TABLE_MAIN_SEQUENCE); $row_entity_id_next = self::get_row_entity_id_by_row_id(1, $id, $c_id); - $sql = "DELETE FROM $table WHERE sequence_row_entity_id_next = $row_entity_id_next"; + $sql = "DELETE FROM $table + WHERE sequence_row_entity_id_next = $row_entity_id_next"; Database::query($sql); } @@ -1042,11 +1069,15 @@ class SequenceManager } } - public static function get_sessions_by_user_id ($user_id, $row_entity_id) { + public static function get_sessions_by_user_id($user_id, $row_entity_id) + { if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } $val_table = Database::get_main_table(TABLE_SEQUENCE_VALUE); + + $row_entity_id = intval($row_entity_id); + $sessions = []; $sql = "SELECT session_id FROM $val_table WHERE user_id = $user_id @@ -1058,7 +1089,8 @@ class SequenceManager return $sessions; } - public static function temp_hack_4_delete($entity_id, $row_id, $c_id) { + public static function temp_hack_4_delete($entity_id, $row_id, $c_id) + { if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } @@ -1073,7 +1105,8 @@ class SequenceManager } return false; } - public static function temp_hack_3_delete($entity_id, $row_id, $c_id, $rule_id) { + public static function temp_hack_3_delete($entity_id, $row_id, $c_id, $rule_id) + { if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } @@ -1088,7 +1121,8 @@ class SequenceManager } if (is_array($seq_array)) { foreach ($seq_array as $seq) { - $sql = "SELECT id FROM $seq_table WHERE sequence_row_entity_id_next = ".$seq['sequence_row_entity_id_next']; + $sql = "SELECT id FROM $seq_table + WHERE sequence_row_entity_id_next = ".$seq['sequence_row_entity_id_next']; $result = Database::query($sql); if (Database::num_rows($result) > 1){ $value = self::get_value_by_row_entity_id($seq['sequence_row_entity_id_next']); @@ -1110,9 +1144,10 @@ class SequenceManager } } } - $sql = "DELETE FROM $seq_table WHERE - (sequence_row_entity_id = $row_entity_id AND sequence_row_entity_id_next = 0 ) OR - (sequence_row_entity_id_next = $row_entity_id)"; + $sql = "DELETE FROM $seq_table + WHERE + (sequence_row_entity_id = $row_entity_id AND sequence_row_entity_id_next = 0 ) OR + (sequence_row_entity_id_next = $row_entity_id)"; Database::query($sql); if (Database::affected_rows() > 0) { return (!empty($seq_array))? $seq_array : true; @@ -1121,7 +1156,8 @@ class SequenceManager return false; } - public static function temp_hack_2_delete($entity_id, $row_id, $c_id) { + public static function temp_hack_2_delete($entity_id, $row_id, $c_id) + { if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } @@ -1136,7 +1172,9 @@ class SequenceManager } return false; } - public static function temp_hack_5($entity_id, $row_id, $c_id, $rule_id) { + + public static function temp_hack_5($entity_id, $row_id, $c_id, $rule_id) + { if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } @@ -1150,7 +1188,8 @@ class SequenceManager return false; } - public static function temp_hack_4_set_aval($row_entity_id, $user_id, $session_id, $available, $available_end_date = null) { + public static function temp_hack_4_set_aval($row_entity_id, $user_id, $session_id, $available, $available_end_date = null) + { if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } @@ -1184,7 +1223,7 @@ class SequenceManager if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } - $user_id = intval(Database::escape_string($user_id)); + $user_id = intval($user_id); if ($user_id > 0) { $user_filter = "WHERE user_id = $user_id"; } else { @@ -1210,9 +1249,9 @@ class SequenceManager if (self::_debug) { error_log('Entering '.__FUNCTION__.' in '.__FILE__); } - $row_entity_id = intval(Database::escape_string($row_entity_id)); - $user_id = intval(Database::escape_string($user_id)); - $session_id = intval(Database::escape_string($session_id)); + $row_entity_id = intval($row_entity_id); + $user_id = intval($user_id); + $session_id = intval($session_id)); $val_table = Database::get_main_table(TABLE_SEQUENCE_VALUE); From 5316943218a159be5500f9450d95d57651ad9920 Mon Sep 17 00:00:00 2001 From: aragonc Date: Mon, 18 May 2015 17:08:50 -0500 Subject: [PATCH 03/13] index fix css forum CT#7539 #TMI --- app/Resources/public/css/base.css | 20 +- main/forum/forumfunction.inc.php | 9 +- main/forum/index.php | 245 ++++++++++----------- main/img/icons/16/post-item.png | Bin 0 -> 494 bytes main/img/icons/22/notification_mail.png | Bin 0 -> 933 bytes main/img/icons/22/notification_mail_ok.png | Bin 0 -> 976 bytes main/img/icons/22/post-forum.png | Bin 0 -> 927 bytes main/img/icons/32/forum_blue.png | Bin 0 -> 875 bytes main/img/icons/32/forum_yellow.png | Bin 0 -> 831 bytes 9 files changed, 144 insertions(+), 130 deletions(-) create mode 100644 main/img/icons/16/post-item.png create mode 100644 main/img/icons/22/notification_mail.png create mode 100644 main/img/icons/22/notification_mail_ok.png create mode 100644 main/img/icons/22/post-forum.png create mode 100644 main/img/icons/32/forum_blue.png create mode 100644 main/img/icons/32/forum_yellow.png diff --git a/app/Resources/public/css/base.css b/app/Resources/public/css/base.css index 66e3bb3a79..77d737a13f 100644 --- a/app/Resources/public/css/base.css +++ b/app/Resources/public/css/base.css @@ -6120,7 +6120,25 @@ div#chat-remote-video video { height: auto; width: 100%; } - +/* CSS Forum */ +.forum .number-post{ + background-color: #F7F7F9; + border: 1px solid #E1E1E1 ; + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + padding: 10px; + text-align: center; +} +.forum .title{ + margin: 0; + padding: 0; + font-size: 18px; +} +.forum .description{ + font-size: 14px; + color: #666666; +} /* CSS NEW TOP ******************************************************************************/ /* CSS Responsive */ @media (min-width: 1025px) and (max-width: 1200px) { diff --git a/main/forum/forumfunction.inc.php b/main/forum/forumfunction.inc.php index cbbb99e621..71bf5acc17 100755 --- a/main/forum/forumfunction.inc.php +++ b/main/forum/forumfunction.inc.php @@ -1294,7 +1294,14 @@ function class_visible_invisible($current_visibility_status) return 'class="invisible"'; } } - +function status_visible_invisible($current_visibility_status) +{ + $current_visibility_status = intval($current_visibility_status); + if ($current_visibility_status == 0) { + $status='invisible'; + return $status; + } +} /** * Retrieve all the information off the forum categories (or one specific) for the current course. * The categories are sorted according to their sorting order (cat_order diff --git a/main/forum/index.php b/main/forum/index.php index df6805e8eb..88b4d5f0cb 100755 --- a/main/forum/index.php +++ b/main/forum/index.php @@ -268,7 +268,11 @@ if (is_array($forumCategories)) { $iconsEdit = ''; $idCategory = $forumCategory['cat_id']; $urlCategory = 'viewforumcategory.php?'.api_get_cidreq().'&forumcategory='.intval($idCategory); - $titleCategory = $forumCategory['cat_title']; + $titleCategory .= Display::tag( + 'a', $forumCategory['cat_title'], + array('href' => $urlCategory,'class' => status_visible_invisible($forumCategory['visibility'])) + ); + $descriptionCategory = $forumCategory['cat_comment']; if(!empty($idCategory)){ @@ -315,16 +319,15 @@ if (is_array($forumCategories)) { } } - $html .= '
' . - Display::tag( - 'a', - Display::tag( - 'h3', - $titleCategory . Display::tag('div',$iconsEdit), - null - ), - array('href' => $urlCategory,'class' => class_visible_invisible($forumCategory['visibility'])) - ); + $html .= '
'; + $html .= Display::tag('div',$iconsEdit,array('class'=>'pull-right')); + $icoCategory = Display::return_icon('forum_blue.png', + get_lang($forumCategory['cat_title']), + array('class'=>''), + ICON_SIZE_MEDIUM + ); + $html .= '

' . $icoCategory . $titleCategory . '

'; + if ($descriptionCategory != '' && trim($descriptionCategory)!= ' ') { $html .= '
'.$descriptionCategory.'
'; @@ -335,91 +338,22 @@ if (is_array($forumCategories)) { - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - echo ''; - + echo '
'; if (!empty($forumsInCategory)) { // Step 4: The interim headers (for the forum). - echo '
'; + /* echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; - echo ''; + echo ''; */ // Step 5: We display all the forums in this category. + foreach ($forum_list as $forum) { // Here we clean the whatnew_post_info array a little bit because to display the icon we // test if $whatsnew_post_info[$forum['forum_id']] is empty or not. @@ -440,6 +374,7 @@ if (is_array($forumCategories)) { // Note: This can be speed up if we transform the $forum_list // to an array that uses the forum_category as the key. + if (isset($forum['forum_category']) && $forum['forum_category'] == $forumCategory['cat_id'] ) { @@ -467,9 +402,13 @@ if (is_array($forumCategories)) { if ($show_forum) { $form_count++; - $mywhatsnew_post_info = isset($whatsnew_post_info[$forum['forum_id']]) ? $whatsnew_post_info[$forum['forum_id']] : null; + $mywhatsnew_post_info = isset($whatsnew_post_info[$forum['forum_id']]) ? + $whatsnew_post_info[$forum['forum_id']] : null; + $html = '
'; + $html .= '
'; - $forum_image = ''; + + /* $forum_image = ''; // Showing the image if (!empty($forum['forum_image'])) { @@ -527,7 +466,7 @@ if (is_array($forumCategories)) { } echo ''; - + */ // Validation when belongs to a session $session_img = api_get_session_image( $forum['session_id'], @@ -535,8 +474,10 @@ if (is_array($forumCategories)) { ); if ($forum['forum_of_group'] != '0') { - $my_all_groups_forum_name = isset($all_groups[$forum['forum_of_group']]['name']) ? $all_groups[$forum['forum_of_group']]['name'] : null; - $my_all_groups_forum_id = isset($all_groups[$forum['forum_of_group']]['id']) ? $all_groups[$forum['forum_of_group']]['id'] : null; + $my_all_groups_forum_name = isset($all_groups[$forum['forum_of_group']]['name']) ? + $all_groups[$forum['forum_of_group']]['name'] : null; + $my_all_groups_forum_id = isset($all_groups[$forum['forum_of_group']]['id']) ? + $all_groups[$forum['forum_of_group']]['id'] : null; $group_title = api_substr( $my_all_groups_forum_name, 0, @@ -557,29 +498,57 @@ if (is_array($forumCategories)) { } $forum['forum_of_group'] == 0 ? $groupid = '' : $groupid = $forum['forum_of_group']; - echo '
'; + $html.= Display::tag( + 'p', + strip_tags($forum['forum_comment']), + array('class'=>'description') + ); + $html .= ''; + $html .= ''; // The number of topics and posts. - $number_threads = isset($forum['number_of_threads']) ? $forum['number_of_threads'] : null; - $number_posts = isset($forum['number_of_posts']) ? $forum['number_of_posts'] : null; - echo ''; - echo ''; + $html .= '
'; + $html .= '
'; + $html .= '
'.Display::return_icon( + 'post-forum.png', + null, + null, + ICON_SIZE_SMALL + ) . ' ' . $number_threads . '
'; + $html .= '
'; // The last post in the forum. if ($forum['last_poster_name'] != '') { @@ -598,23 +567,29 @@ if (is_array($forumCategories)) { $userinfo['username'] ); } - echo '
'; + $html .= ''; + $html .= '
'; - echo '
'; + + $html .= ''; + $html .= ''; + $html .= ''; + + $html .= ''; + $html .= ''; + $html .= ''; + + } + echo $html; } } } else { - echo ''.(api_is_allowed_to_edit( + ).''.(api_is_allowed_to_edit( false, true - ) ? '' : '').''; + ) ? '
' : '
').''; } - echo '
'; - echo ''. - prepare4display($forumCategory['cat_title']).$session_displayed. - ''.$session_img.'
'; - if ($forumCategory['cat_comment'] != '' && trim( - $forumCategory['cat_comment'] - ) != ' ' - ) { - echo ''.prepare4display( - $forumCategory['cat_comment'] - ).''; - } - echo '
'; - if (!empty($forumCategory['cat_id'])) { - if (api_is_allowed_to_edit( - false, - true - ) && !($forumCategory['session_id'] == 0 && intval( - $sessionId - ) != 0) - ) { - echo ''.Display::return_icon( - 'edit.png', - get_lang('Edit'), - array(), - ICON_SIZE_SMALL - ).''; - echo '".Display::return_icon( - 'delete.png', - get_lang('Delete'), - array(), - ICON_SIZE_SMALL - ).''; - display_visible_invisible_icon( - 'forumcategory', - strval(intval($forumCategory['cat_id'])), - strval(intval($forumCategory['visibility'])) - ); - display_lock_unlock_icon( - 'forumcategory', - strval(intval($forumCategory['cat_id'])), - strval(intval($forumCategory['locked'])) - ); - display_up_down_icon( - 'forumcategory', - strval(intval($forumCategory['cat_id'])), - $forumCategories - ); - } - } - echo '
'.get_lang('Forum').''.get_lang('Topics').''.get_lang('Posts').''.get_lang('LastPosts').''.get_lang('Actions').'
'; + $html .= ''.$number_threads.''.$number_posts.''; + if (!empty($forum['last_post_id'])) { - echo api_convert_and_format_date( + $html .= Display::return_icon( + 'post-item.png', + null, + null, + ICON_SIZE_TINY + ) . ' ' . + api_convert_and_format_date( $forum['last_post_date'] - ).'
'.get_lang( + ) . '
' . get_lang( 'By' - ).' '.display_user_link( + ) . ' ' . display_user_link( $poster_id, $name, '', $username ); } - echo '
'; if (api_is_allowed_to_edit( false, true @@ -622,15 +597,15 @@ if (is_array($forumCategories)) { $sessionId ) != 0) ) { - echo ''. + $html .= ''. Display::return_icon( 'edit.png', get_lang('Edit'), array(), ICON_SIZE_SMALL - ).''; - echo ''; - display_visible_invisible_icon( + $html .= return_visible_invisible_icon( 'forum', $forum['forum_id'], $forum['visibility'] ); - display_lock_unlock_icon( + $html .= return_lock_unlock_icon( 'forum', $forum['forum_id'], $forum['locked'] ); - display_up_down_icon( + $html .= return_up_down_icon( 'forum', $forum['forum_id'], $forumsInCategory ); } - $iconnotify = 'send_mail.gif'; - $session_forum_notification = isset($_SESSION['forum_notification']['forum']) ? $_SESSION['forum_notification']['forum'] : false; + $iconnotify = 'notification_mail.png'; + $session_forum_notification = isset($_SESSION['forum_notification']['forum']) ? + $_SESSION['forum_notification']['forum'] : false; if (is_array($session_forum_notification)) { if (in_array( $forum['forum_id'], $session_forum_notification )) { - $iconnotify = 'send_mail_checked.gif'; + $iconnotify = 'notification_mail_ok.png'; } } if (!api_is_anonymous( ) && api_is_allowed_to_session_edit(false, true) ) { - echo ''. Display::return_icon( $iconnotify, - get_lang('NotifyMe') - ).''; + get_lang('NotifyMe'), + null, + ICON_SIZE_SMALL + ) . ''; } - echo '
'.get_lang( + echo '
'.get_lang( 'NoForumInThisCategory' - ).'
'; + + echo '
'; } } Display:: display_footer(); diff --git a/main/img/icons/16/post-item.png b/main/img/icons/16/post-item.png new file mode 100644 index 0000000000000000000000000000000000000000..e29c6b2f8cab8fafd03db90174e6433eed7335f3 GIT binary patch literal 494 zcmV2Sp~OJ(b8C?un}BD z2q=QJ*a#N8(+GxiDJ&HH(*!$}6hb5^>{93lP!RkAX=Gi+y>~1$aCPs-WV(4c?{m(~ z3HEwYI*L`ilhW;C&jRkFgN~F&g_Nd*a6-;uVkE|as``ReG2T&C$8j2$3%r-}^bQ@r z31Iyzt*sZhSff9Ma8=GX<-D(6-Za4sPSx%ixAgn3aqi#ZzXd53e((AUKBE%C4Jkcq zXw>k8R_mCuY^$mjETE&`e?BQZE-1?*Si=V~{?O|^+$lURNNEEb{|hw<=A`s?7xjml k1nanfsa*&vA*|QIFM>s8jK2U4KL7v#07*qoM6N<$f|B6RcmMzZ literal 0 HcmV?d00001 diff --git a/main/img/icons/22/notification_mail.png b/main/img/icons/22/notification_mail.png new file mode 100644 index 0000000000000000000000000000000000000000..ed63fab3c1fd58dd119ab4b55aa091a8707d7886 GIT binary patch literal 933 zcmV;W16urvP)5jciI2+NwzH z!ByKsFTL~%AE6(lsv>bj^iU+HiV_Hv5DT?Lt)i+@R4Iq3ky@qv2_YsWwlU2bduDs6 zutaR!(Eg-3%=^wf^S-0sjKY7=%*@Q0U@-W(l=2fHgkM$FUk?rrzL=Vtx_h)nIW2T< zZtml9xqQ7+srX;c8HTYeg!puFa?n~k6VLWqxiKHuD_E6!vx_X>r= z8;x>~<1jQd#QglcC#AfszAAKjdfF61T=6_lQIzBLIF3Uql_HzX;<~P)>-xS1@a4=m z!-~Xg2KK5i;!?UwEEXe`O0lxCLbY1OaU7D#B#VoS6bc0ZR8<{TW;3@wd+(jp*SfB% zb~tn**mYg5Ud^DYD(Q3@P1D%i+{AGlmX?-kPyki;ulYK{W}>gBQ*F^zHn(&5{Vfeg zC=|r9EQAnbvsn%g4;w-O0!G_z%@tOAh%;s@_wGMDvFg#$Q2?Zrtgf!Iu&_`E4F-c4 zruE>M-E1pFcf{h(-CvN>s{|WyYB}0z!RrZb-u{sf-+v3U%{YE|vw-nc;d^8Mmo5Zy1TTgbm_U#&-c8Cjuea*HuzKSEgaLW{mMJ6tfaC_}%gpdrxqeSd> z+;WA0Uq3xKUo5fxB*);n9su6GG{PTSPZ=LQkD@4SJkC)S0<$&n>fqf!^Az_>#Cs#P zSZ~y(H)_}B@!klzXL+6%ON4{q+clM6GD4!Iv3UL3yZ(dhNyJ8p(|L~?V0)G0>b}Nszavp$? zvZ`G9>PF&xf8Q-l_0IYl8S)g89$x9-uZ{JMoe%yGr>Xu1H&`C4_XH`l00000NkvXX Hu0mjfRM549 literal 0 HcmV?d00001 diff --git a/main/img/icons/22/notification_mail_ok.png b/main/img/icons/22/notification_mail_ok.png new file mode 100644 index 0000000000000000000000000000000000000000..d83786057b7a7faec28c365f5ffc530c912db5e4 GIT binary patch literal 976 zcmV;>126oEP)1ZU^hE9 zww6)cCWBc-!Cmbi2n;L;UU=)pVC>p4FD8u9Dk`h-rq)elj15OYp>bpVotV}%zG<4@ z@4KsJ3rVBhzHlzi^E~InbDr~@a|Hg29&n&v@Bdsc>K_+&3ZkWKSy$)JC#j_@WFTegiENDp0xU^gQDiDKg%eCmXPE4m1fZmsSjnx__&e+!TzU5jX2Go0wOgCVMQ^Z+=)IpQmP&Q-%Yn;G4@@&8 z4OMNDN#b1K9MSiqgjz!YG;BAY#|8Z%Zry#riP7UoEw&o}3F#xs&mG8K3*B7`cB37$ zV6KVT^Md%iZibKaabxB_o2hiwzLm}}b$b@YDKT^~glv-QpiRL5UF{x5jveOu%ug(> zCRmMcF!jS69z~|F*WYYu<5KJ@moM-_Re9%)0q)NILZzY+4EXRW4)TQ(Ruy$3r0czbw&#norLdGrv1Ah5iaq+F>W*{!b*-gury&1@6s^j2-1K7~%7Qk@4n zy(Bl&Y^mEgTkBtgx*D&nKciSE(55){+~%&liUY~s!bVDM4qo_kNw=C!$gM3eh3-mj zZNaNJSxcm9Zj?c*Xk~!;Cx7T|ZiisAHGIRH%4QYm>24SPT21Nz6-_G(UtPTsI@II8 yV>0U920_^OSM_gcI{J2YXL)HkG5&uzP4zc8YaaP65FHl)0000_vP~%ow7$OdQ&mu__w@K_)(Qr2p7Z1Y6d%EM4u= zX6cf&H~09EChKj|W}?5Bd(OGP^SQrsIQIy4ilL#Gk@7`A*&%C=bLYO@Iw*ERk2N*@ z^g&yjM-ipdrsHwWMk2D_>plO+nKOf%-)V(bF!($|1duYPWV2l-{QmV$pKsf5PcAI* zW=o4muC2Z63Wb&?2L?WI!b3x?Z4C`KdINz>zP4ZQ-ZfQ4@gy=C&PF0d=sQP_$c5wJPyF$j~~-iU5zaz@pQTf{&{A`(RXVaukG8%*W=^q zCwsg@*isTtrOKtTW*E7K$em3GtO&s~rU`&Y*AalOsvNGbFAE#0>gYS*v}F;!e;TBufc`YRRh~zb-<04m4)ikmPP-_2*<+VZIPMf z<@K~>O$%59kWz{|uXl`K@Xs79#LDdl57bxo?sZK3^!V{@(e-SW&Tu&SS2B5&!NH~c z`25B*e;jznhkU8;30yw_{zQr2w=EgZi9!S=J22^Ca(wQgN=5|t%A6q^i(ixZu6OLvRK{0It zkQ#`z0CjFBoi!yK@fBfLQg88yA$c?&1VdA=gqz-bzQ$@!SFg_iKm;-dI8f%|#*T7SvDEl)sX}nGp`6Cjv`>mD0z$C_=&11~ z?rdF33{$EXOr807TL2w3CD!(m%u}$#<4m--KN;cZ^DzKgd&a4L{25(JZjETT9}P16 zYaW0GPrfyPNGU>VfXRrCOSJ=V*jI!vUj4f^6i}!ts6tR%gD*jA0Fgxsx(26srG>0FH0fJdr)zN1 zdXmiI6ojG%d!LTdJsLO_8m_Q5P-sbLRj5%bb}b z2570D1M`>6p&leM-+)wYt7~pVvCsFeuE(0P&>tA^=(&<9*Ma~5002ovPDHLkV1hIE Bh1viB literal 0 HcmV?d00001 diff --git a/main/img/icons/32/forum_yellow.png b/main/img/icons/32/forum_yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..4de9415e84cd6e2907543122da1cca99fb1caae5 GIT binary patch literal 831 zcmV-F1Hk-=P) zSa@dUdEV#4`+nz{g*E+WiT~nN*O9Z}w2O$gRDnW1>6U$d_nCXi6$MZV>AiJ$5-7`| z?pZ{Ywl$sXnqD!0z8f7e+t3nu6uv~b1yjjoCzFMb)f(prOGq0kqMNjZ=&RKApk^qM=b!V?{o~u zXvC4?LI9wtS(G*)E!QU89k7cAfV%9du!>RwFapFg9@to*)_%pn^MDD|=3J^pAR32A z%)PdfF!LQ8D<6PF{s7T9Y;K3xE)XO8nMy;lAAa12nUOpJ6lUo8SMP@{M`5YYgcz{C z1!B!GbQ{K>h5;lYGY14SFtu_g)E!&8c@~HU^~a%NM{u5UcOW-_nl=`uwsHXFTgdjs z=?n$b90&nbJ^&@b0PE_#_}xYLeASHyJK^mG7i#aGSHlg{#bw5D7!@FO#&x^~pyT6PQ zuY&=yjv&kfqYq$uFnB?~tO*!>7?LEuw?GT=fMdbOEAaCq|JK<_FL%6Gsm(0!WR*@ZIctkqW5ofDL=y zF)cZ)G8(VLrLqqDxZ z008M(HbCxrBTepKdhe5#vJO(DHzPz=wY7+iKG(OZJ=TAZu5^?|l002ov JPDHLkV1l9Ja#sKV literal 0 HcmV?d00001 From 3bc6f93c5d1a067c14e3dfb19639e624e06a07a3 Mon Sep 17 00:00:00 2001 From: aragonc Date: Mon, 18 May 2015 17:13:46 -0500 Subject: [PATCH 04/13] index fix css forum CT#7539 #TMI --- app/Resources/public/css/base.css | 3 +++ main/forum/index.php | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/Resources/public/css/base.css b/app/Resources/public/css/base.css index 77d737a13f..103e7d2ab0 100644 --- a/app/Resources/public/css/base.css +++ b/app/Resources/public/css/base.css @@ -6121,6 +6121,9 @@ div#chat-remote-video video { width: 100%; } /* CSS Forum */ +.forum { + border-color: #dddddd !important; +} .forum .number-post{ background-color: #F7F7F9; border: 1px solid #E1E1E1 ; diff --git a/main/forum/index.php b/main/forum/index.php index 88b4d5f0cb..b0131b74b0 100755 --- a/main/forum/index.php +++ b/main/forum/index.php @@ -404,7 +404,7 @@ if (is_array($forumCategories)) { $form_count++; $mywhatsnew_post_info = isset($whatsnew_post_info[$forum['forum_id']]) ? $whatsnew_post_info[$forum['forum_id']] : null; - $html = '
'; + $html = '
'; $html .= '
'; From 8e0ef604eb660226f47923b89e926aed118d6929 Mon Sep 17 00:00:00 2001 From: aragonc Date: Mon, 18 May 2015 19:01:36 -0500 Subject: [PATCH 05/13] update fix icons notifications --- app/Resources/public/css/base.css | 4 + main/forum/index.php | 123 +++++++++++++++++------- main/img/icons/22/notification_mail.png | Bin 933 -> 848 bytes 3 files changed, 93 insertions(+), 34 deletions(-) diff --git a/app/Resources/public/css/base.css b/app/Resources/public/css/base.css index 103e7d2ab0..86f8deae25 100644 --- a/app/Resources/public/css/base.css +++ b/app/Resources/public/css/base.css @@ -6133,6 +6133,10 @@ div#chat-remote-video video { padding: 10px; text-align: center; } +.forum .number-post p{ + padding: 0; + margin: 0; +} .forum .title{ margin: 0; padding: 0; diff --git a/main/forum/index.php b/main/forum/index.php index b0131b74b0..0b223afc25 100755 --- a/main/forum/index.php +++ b/main/forum/index.php @@ -403,51 +403,67 @@ if (is_array($forumCategories)) { if ($show_forum) { $form_count++; $mywhatsnew_post_info = isset($whatsnew_post_info[$forum['forum_id']]) ? - $whatsnew_post_info[$forum['forum_id']] : null; - $html = '
'; + $whatsnew_post_info[$forum['forum_id']] : null; + $html = '
'; $html .= '
'; - /* $forum_image = ''; + $forum_image = ''; + $imgForum = ''; // Showing the image if (!empty($forum['forum_image'])) { $image_path = api_get_path( WEB_COURSE_PATH - ).api_get_course_path( - ).'/upload/forum/images/'.$forum['forum_image']; + ) . api_get_course_path() . '/upload/forum/images/' . $forum['forum_image']; $image_size = api_getimagesize($image_path); - $img_attributes = ''; if (!empty($image_size)) { - if ($image_size['width'] > 100 || $image_size['height'] > 100) { - //limit display width and height to 100px - $img_attributes = ' style="width:100px" width="100px" height="100px"'; - $td_width = 100; - } else { - $td_width = $image_size['width']; - } - $forum_image = ""; + //limit display width and height to 100px + $img_attributes = ' style="width:80px" width="100px" height="80px"'; + $imgForum = ""; } else { - $forum_image = ''; - $td_width = 20; + $imgForum = ''; + } - echo '
'; - echo $forum_image; + + $forum_image = $imgForum; } else { - echo ''; + + if ($forum['forum_of_group'] == '0') { + $forum_image = Display::return_icon( + 'forum_group.png', + get_lang('GroupForum'), + null, + ICON_SIZE_LARGE + ); + + } else { + $forum_image = Display::return_icon( + 'forum.png', + get_lang('Forum'), + null, + ICON_SIZE_LARGE + ); + } + } + + + /* if ($forum['forum_of_group'] !== '0') { if (is_array( $mywhatsnew_post_info ) && !empty($mywhatsnew_post_info) ) { - echo Display::return_icon( + $forum_image = Display::return_icon( 'forumgroupnew.gif' ); } else { - echo Display::return_icon( - 'forumgroup.gif', - get_lang('GroupForum') + $forum_image = Display::return_icon( + 'forum_group.png', + get_lang('GroupForum'), + null, + ICON_SIZE_LARGE ); } } else { @@ -455,18 +471,25 @@ if (is_array($forumCategories)) { $mywhatsnew_post_info ) && !empty($mywhatsnew_post_info) ) { - echo Display::return_icon( - 'forum.gif', - get_lang('Forum') + $forum_image = Display::return_icon( + 'forum.png', + get_lang('Forum'), + null, + ICON_SIZE_LARGE ); } else { - echo Display::return_icon('forum.gif'); + $forum_image = Display::return_icon( + 'forumx.png', + get_lang('Forum'), + null, + ICON_SIZE_LARGE); } } - } + */ + + + - echo '
'; + $html = ''; + $html .= '
'; + + + + $my_session = isset($_SESSION['id_session']) ? $_SESSION['id_session'] : null; if ((!isset($_SESSION['id_session']) || $_SESSION['id_session'] == 0) && !empty($forum_category['session_name'])) { @@ -163,25 +170,61 @@ if ($action_forums != 'add') { $session_displayed = ''; } $forum_categories_list = ''; - echo '
'; - echo ''; + $html .= Display::tag( + 'h3',$icoCategory. + Display::tag('a', + $forumTitle, + array( + 'href'=>$linkForumCategory, + 'class'=>status_visible_invisible(strval(intval($forum_category['visibility']))) + ) + ).$session_displayed.$session_img, + null + ); + + + + if ($descriptionCategory != '' && trim($descriptionCategory)!= ' ') + { + $html .= '
'.$descriptionCategory.'
'; } - echo '
'; + /* echo ''; echo ''; echo ''; @@ -190,7 +233,12 @@ if ($action_forums != 'add') { echo ''; echo ''; echo ''; + */ + + $html .= ''; + echo $html; + echo '
'; // The forums in this category. $forums_in_category = get_forums_in_category($forum_category['cat_id']); @@ -244,23 +292,29 @@ if ($action_forums != 'add') { $form_count = isset($form_count) ? $form_count : 0; if ($show_forum === true) { $form_count++; - echo '
'; - echo ''; if ($forum['forum_of_group'] != '0') { $my_all_groups_forum_name = isset($all_groups[$forum['forum_of_group']]['name']) ? $all_groups[$forum['forum_of_group']]['name'] : null; @@ -276,15 +330,93 @@ if ($action_forums != 'add') { } else { $session_displayed = ''; } - echo ''; //$number_forum_topics_and_posts=get_post_topics_of_forum($forum['forum_id']); // deprecated // the number of topics and posts - $my_number_threads = isset($forum['number_of_threads']) ? $forum['number_of_threads'] : ''; + $my_number_threads = isset($forum['number_of_threads']) ? $forum['number_of_threads'] : 0 ; + + $my_number_posts = isset($forum['number_of_posts']) ? $forum['number_of_posts'] : 0 ; + + $html .= '
'; + $html .= '
'; + $html .= '
'; + $html .= '
'.$forum_image .'

' . $my_number_posts . ' ' . get_lang('Posts') . '

'; + $html .= '
'; + + $html .= '
'; + $iconForum = Display::return_icon('forum_yellow.png', + get_lang($forumCategory['cat_title']), + null, + ICON_SIZE_MEDIUM + ); + $linkForum = ''; + $linkForum .= Display::tag( + 'a', + $forum['forum_title'].$session_displayed, + array( + 'href' => 'viewforum.php?'.api_get_cidreq().'&gidReq='.$forum['forum_of_group'].'&forum='.$forum['forum_id'].'&origin='.$origin.'&search='.Security::remove_XSS(urlencode(isset($_GET['search']) ? $_GET['search'] : '')), + 'class' => status_visible_invisible($forum['visibility']) + ) + ); + $html .= Display::tag( + 'h3', + $linkForum . ' ' . $forum_title_group_addition, + array( + 'class' => 'title' + ) + ); + $html .= Display::tag( + 'p', + strip_tags($forum['forum_comment']), + array( + 'class' => 'description' + ) + ); + $html .= '
'; + $html .= '
'; + $html .= '
'; + + // The number of topics and posts. + if ($forum['forum_of_group'] !== '0') { + $iconEmpty=''; + $newPost=''; + if (is_array( + $my_whatsnew_post_info + ) && !empty($my_whatsnew_post_info) + ) { + $newPost = ' '.Display::return_icon( + 'alert.png', + get_lang('Forum'), + null, + ICON_SIZE_SMALL + ); + } else { + $newPost = $iconEmpty; + } + } else { + if (is_array( + $my_whatsnew_post_info + ) && !empty($my_whatsnew_post_info) + ) { + $newPost = ' '.Display::return_icon( + 'alert.png', + get_lang('Forum'), + null, + ICON_SIZE_SMALL + ); + } else { + $newPost = $iconEmpty; + } + } + + $html .= '
'; + $html .= '
'.Display::return_icon( + 'post-forum.png', + null, + null, + ICON_SIZE_SMALL + ) . ' ' . $my_number_threads . '
'.$newPost.'
'; - $my_number_posts = isset($forum['number_of_posts']) ? $forum['number_of_posts'] : ''; - echo '
'; - echo ''; // the last post in the forum if ($forum['last_poster_name'] != '') { $name = $forum['last_poster_name']; @@ -293,38 +425,54 @@ if ($action_forums != 'add') { $name = api_get_person_name($forum['last_poster_firstname'], $forum['last_poster_lastname']); $poster_id = $forum['last_poster_id']; } - echo ''; - echo ''; + $html .= ''; + $html .= ''; + + $html .= ''; + $html .= ''; + + $html .= ''; } + echo $html; } } if (count($forum_list) == 0) { - echo ''; + echo '
'.get_lang('NoForumInThisCategory').'
'; } - echo '
'; + $forumId = $forum_category['cat_id']; + $forumTitle = $forum_category['cat_title']; + $linkForumCategory = 'viewforumcategory.php?'.api_get_cidreq().'&forumcategory='.strval(intval($forumId)); + $descriptionCategory = $forum_category['cat_comment']; + $icoCategory = Display::return_icon('forum_blue.png', + get_lang($forumCategory['cat_title']), + array('class'=>''), + ICON_SIZE_MEDIUM + ); - echo ''.prepare4display($forum_category['cat_title']).$session_displayed.''. $session_img .'
'; + if (api_is_allowed_to_edit(false, true) && !($forum_category['session_id'] == 0 && intval($my_session) != 0)) { - echo ''.prepare4display($forum_category['cat_comment']).''; + $iconsEdit = ''. + Display::return_icon( + 'edit.png', + get_lang('Edit'), + array(), + ICON_SIZE_SMALL + ).''; + $iconsEdit .= '". + Display::return_icon( + 'delete.png', + get_lang('Delete'), + array(), + ICON_SIZE_SMALL + ).''; + $iconsEdit .= return_visible_invisible_icon('forumcategory', $forum_category['cat_id'], $forum_category['visibility'], array('forumcategory' => $_GET['forumcategory'])); + $iconsEdit .= return_lock_unlock_icon('forumcategory', $forum_category['cat_id'], $forum_category['locked'], array('forumcategory' => $_GET['forumcategory'])); + $iconsEdit .= return_up_down_icon('forumcategory', $forum_category['cat_id'], $forum_categories_list); + $html .= Display::tag('div',$iconsEdit,array('class'=>'pull-right')); + } - if (api_is_allowed_to_edit(false, true) && !($forum_category['session_id'] == 0 && intval($my_session) != 0)) { - echo '
'; - echo ''.Display::return_icon('edit.png', get_lang('Edit'), array(), ICON_SIZE_SMALL).''; - echo '".Display::return_icon('delete.png', get_lang('Delete'), array(), ICON_SIZE_SMALL).''; - display_visible_invisible_icon('forumcategory', $forum_category['cat_id'], $forum_category['visibility'], array('forumcategory' => $_GET['forumcategory'])); - display_lock_unlock_icon('forumcategory', $forum_category['cat_id'], $forum_category['locked'], array('forumcategory' => $_GET['forumcategory'])); - display_up_down_icon('forumcategory', $forum_category['cat_id'], $forum_categories_list); - echo '
'; */ + // Step 3: The interim headers (for the forum). + /* echo '
'.get_lang('Forum').''.get_lang('ForumThreads').''.get_lang('Actions').'
'; + + $html = '
'; + $html .= '
'; + $my_whatsnew_post_info = isset($whatsnew_post_info[$forum['forum_id']]) ? $whatsnew_post_info[$forum['forum_id']] : null; - if ($forum['forum_of_group'] !== '0') { - if (is_array($my_whatsnew_post_info) && !empty($my_whatsnew_post_info)) { - echo Display::return_icon('forumgroupnew.gif'); - } else { - echo Display::return_icon('forumgroup.gif', get_lang('GroupForum')); - } + + + if ($forum['forum_of_group'] == '0') { + $forum_image = Display::return_icon( + 'forum_group.png', + get_lang('GroupForum'), + null, + ICON_SIZE_LARGE + ); + } else { - if (is_array($my_whatsnew_post_info) && !empty($my_whatsnew_post_info)) { - echo Display::return_icon('forum.gif', get_lang('Forum')); - } else { - echo Display::return_icon('forum.gif'); - } + $forum_image = Display::return_icon( + 'forum.png', + get_lang('Forum'), + null, + ICON_SIZE_LARGE + ); } - echo '
'.prepare4display($forum['forum_title']).$session_displayed.''.$forum_title_group_addition.'
'.prepare4display($forum['forum_comment']).'
'.$my_number_threads.''.$my_number_posts.''; + $html .= '
'; if (!empty($forum['last_post_id'])) { - echo $forum['last_post_date'].' '.get_lang('By').' '.display_user_link($poster_id, $name); + $html .= Display::return_icon( + 'post-item.png', + null, + null, + ICON_SIZE_TINY + ).' '; + $html .= api_convert_and_format_date( + $forum['last_post_date'] + ).' '.get_lang('By').' '.display_user_link($poster_id, $name); } - echo '
'; + $html .= ''; + $html .= '
'; if (api_is_allowed_to_edit(false, true) && !($forum['session_id'] == 0 && intval(isset($_SESSION['id_session']) ? $_SESSION['id_session'] : null) != 0)) { - echo ''.Display::return_icon('edit.png', get_lang('Edit'), array(), ICON_SIZE_SMALL).''; - echo '".Display::return_icon('delete.png', get_lang('Delete'), array(), ICON_SIZE_SMALL).''; - display_visible_invisible_icon('forum', $forum['forum_id'], $forum['visibility'], array('forumcategory' => $_GET['forumcategory'])); - display_lock_unlock_icon('forum', $forum['forum_id'], $forum['locked'], array('forumcategory' => $_GET['forumcategory'])); - display_up_down_icon('forum', $forum['forum_id'], $forums_in_category); + $html .= ''.Display::return_icon('edit.png', get_lang('Edit'), array(), ICON_SIZE_SMALL).''; + $html .= '".Display::return_icon('delete.png', get_lang('Delete'), array(), ICON_SIZE_SMALL).''; + $html .= return_visible_invisible_icon('forum', $forum['forum_id'], $forum['visibility'], array('forumcategory' => $_GET['forumcategory'])); + $html .= return_lock_unlock_icon('forum', $forum['forum_id'], $forum['locked'], array('forumcategory' => $_GET['forumcategory'])); + $html .= return_up_down_icon('forum', $forum['forum_id'], $forums_in_category); } - $iconnotify = 'send_mail.gif'; + $iconnotify = 'notification_mail_na.png'; if (is_array(isset($_SESSION['forum_notification']['forum']) ? $_SESSION['forum_notification']['forum'] : null)) { if (in_array($forum['forum_id'],$_SESSION['forum_notification']['forum'])) { - $iconnotify = 'send_mail_checked.gif'; + $iconnotify = 'notification_mail.png'; } } if (!api_is_anonymous()) { - echo ''.Display::return_icon($iconnotify, get_lang('NotifyMe')).''; + $html .= ''.Display::return_icon($iconnotify, get_lang('NotifyMe')).''; } - echo '
'.get_lang('NoForumInThisCategory').'
'; + + echo ''; } /* FOOTER */ From f61a34f7054f80c78bcaf2374c790d017c0e197a Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Tue, 19 May 2015 14:05:54 +0200 Subject: [PATCH 09/13] Add sequence CRUD see BT#9893 --- composer.json | 5 +- main/admin/index.php | 2 + main/admin/resource_sequence.php | 31 +++ main/inc/ajax/sequence.ajax.php | 188 ++++++++++++++++++ .../default/admin/resource_sequence.tpl | 139 +++++++++++++ .../Entity/Manager/SequenceManager.php | 17 ++ .../Entity/Repository/SequenceRepository.php | 18 ++ .../CoreBundle/Entity/SequenceResource.php | 114 +++++++++++ 8 files changed, 513 insertions(+), 1 deletion(-) create mode 100644 main/admin/resource_sequence.php create mode 100644 main/inc/ajax/sequence.ajax.php create mode 100644 main/template/default/admin/resource_sequence.tpl create mode 100644 src/Chamilo/CoreBundle/Entity/Manager/SequenceManager.php create mode 100644 src/Chamilo/CoreBundle/Entity/Repository/SequenceRepository.php create mode 100644 src/Chamilo/CoreBundle/Entity/SequenceResource.php diff --git a/composer.json b/composer.json index e91a13c8c8..37d9f7af10 100755 --- a/composer.json +++ b/composer.json @@ -76,7 +76,10 @@ "bower-asset/modernizr": "2.8.*", "bower-asset/jqueryui-timepicker-addon": "@stable", "bower-asset/imageMap-resizer": "0.5.3", - "bower-asset/simplewebrtc": "@stable" + "bower-asset/simplewebrtc": "@stable", + "clue/graph": "~0.9.0", + "graphp/graphviz": "~0.2.0", + "graphp/algorithms": "~0.8.0" }, "require-dev": { "behat/behat": "2.5.*@stable", diff --git a/main/admin/index.php b/main/admin/index.php index 2ae82021fd..81dfadeda3 100644 --- a/main/admin/index.php +++ b/main/admin/index.php @@ -345,7 +345,9 @@ if (api_is_platform_admin()) { if (is_dir(api_get_path(SYS_TEST_PATH) . 'datafiller/')) { $items[] = array('url' => 'filler.php', 'label' => get_lang('DataFiller')); } + $items[] = array('url' => 'archive_cleanup.php', 'label' => get_lang('ArchiveDirCleanup')); + $items[] = array('url' => 'resource_sequence.php', 'label' => get_lang('ResourceSequencing')); if (isset($_configuration['db_manager_enabled']) && $_configuration['db_manager_enabled'] == true && diff --git a/main/admin/resource_sequence.php b/main/admin/resource_sequence.php new file mode 100644 index 0000000000..66725bc078 --- /dev/null +++ b/main/admin/resource_sequence.php @@ -0,0 +1,31 @@ +get_template('admin/resource_sequence.tpl'); +$form = new FormValidator(''); +$sessionList = SessionManager::get_sessions_list(); + +if (!empty($sessionList)) { + //$sessionList[] = ['name' => get_lang('PleaseSelect'), 'id' => 0]; + $sessionList = array_column($sessionList, 'name', 'id'); +} + +$form->addHidden('sequence_type', 'session'); +$form->addSelect( + 'sessions', + get_lang('Sessions'), + $sessionList, + ['id' => 'item', 'multiple' => 'multiple'] +); +$form->addButtonNext(get_lang('UseAsReference'), 'use_as_reference'); +$form->addButtonCreate(get_lang('SetAsRequirementForSelected'), 'set_requirement'); +$form->addButtonSave(get_lang('Save'), 'save_resource'); + +$tpl->assign('left_block', $form->returnForm()); +$tpl->display($layout); + diff --git a/main/inc/ajax/sequence.ajax.php b/main/inc/ajax/sequence.ajax.php new file mode 100644 index 0000000000..324f7a07b8 --- /dev/null +++ b/main/inc/ajax/sequence.ajax.php @@ -0,0 +1,188 @@ +getRepository('ChamiloCoreBundle:SequenceResource'); +switch ($action) { + case 'get_icon': + $link = ''; + switch ($type) { + case 'session': + $showDelete = isset($_REQUEST['show_delete']) ? $_REQUEST['show_delete'] : false; + $image = Display::return_icon('window_list.png'); + $sessionInfo = api_get_session_info($id); + if (!empty($sessionInfo)) { + + + $linkDelete = ''; + if ($showDelete) { + $linkDelete = Display::url( + get_lang('Delete'), + '#', + ['class' => 'delete_vertex', 'data-id' => $id] + ); + } + + $link = '
'. + $image.' '.$sessionInfo['name'].$linkDelete. + '
'; + } + break; + } + echo $link; + break; + case 'delete_vertex': + $vertexId = isset($_REQUEST['vertex_id']) ? $_REQUEST['vertex_id'] : null; + /** @var SequenceResource $resource */ + $resource = $repository->findOneByResourceId($id); + + if (empty($resource)) { + exit; + } + + $graph = $resource->getGraph(); + + if (!empty($graph)) { + /** @var Graph $graph */ + $graph = unserialize($graph); + if ($graph->hasVertex($vertexId)) { + $vertex = $graph->getVertex($vertexId); + $vertex->destroy(); + + $resource->setGraph(serialize($graph)); + + $manager->persist($resource); + $manager->flush(); + } + } + + break; + case 'load_resource': + // children or parent + $loadResourceType = isset($_REQUEST['load_resource_type']) ? $_REQUEST['load_resource_type'] : null; + /** @var SequenceResource $resource */ + $resource = $repository->findOneByResourceId($id); + + if (empty($resource)) { + exit; + } + + $graph = $resource->getGraph(); + + if (!empty($graph)) { + /** @var Graph $graph */ + $graph = unserialize($graph); + + $graphviz = new GraphViz(); + //echo $graphviz->createImageHtml($graph); + + /** @var Vertex $mainVertice */ + if ($graph->hasVertex($id)) { + $mainVertice = $graph->getVertex($id); + + if (!empty($mainVertice)) { + $list = []; + switch ($loadResourceType) { + case 'parent': + $verticeList = $mainVertice->getVerticesEdgeFrom(); + + break; + case 'children': + $verticeList = $mainVertice->getVerticesEdgeTo(); + break; + } + foreach ($verticeList as $vertice) { + $list[] = $vertice->getId(); + } + + if (!empty($list)) { + echo implode(',', $list); + } + } + } + } + break; + case 'save_resource': + $parents = isset($_REQUEST['parents']) ? $_REQUEST['parents'] : null; + $parents = str_replace($id, '', $parents); + $parents = explode(',', $parents); + $parents = array_filter($parents); + + $graph = new Graph(); + + switch ($type) { + case 'session': + $sessionInfo = api_get_session_info($id); + $name = $sessionInfo['name']; + + $main = $graph->createVertex($id); + + foreach ($parents as $parentId) { + $parent = $graph->createVertex($parentId); + // Check if parent Id exists in the DB + /** @var SequenceResource $resource */ + $resource = $repository->findOneByResourceId($parentId); + if ($resource) { + $parentGraph = $resource->getGraph(); + + if (!empty($parentGraph)) { + /** @var Graph $parentGraph */ + $parentGraph = unserialize($parentGraph); + try { + $vertex = $parentGraph->getVertex($parentId); + $parentMain = $parentGraph->createVertex($id); + $vertex->createEdgeTo($parentMain); + $resource->setGraph(serialize($parentGraph)); + + $manager->persist($resource); + $manager->flush(); +/* + $graphviz = new GraphViz(); + echo $graphviz->createImageHtml($parentGraph);*/ + } catch (Exception $e) { + + } + } + } + + $parent->createEdgeTo($main); + } + + $graphviz = new GraphViz(); + //echo $graphviz->createImageHtml($graph); + + /** @var SequenceResource $sequence */ + $sequence = $repository->findOneByResourceId($id); + if (empty($sequence)) { + $sequence = new SequenceResource(); + $sequence + ->setGraph(serialize($graph)) + ->setType(SequenceResource::SESSION_TYPE) + ->setResourceId($id); + } else { + $sequence->setGraph(serialize($graph)); + } + $manager->persist($sequence); + $manager->flush(); + break; + } + + + break; +} diff --git a/main/template/default/admin/resource_sequence.tpl b/main/template/default/admin/resource_sequence.tpl new file mode 100644 index 0000000000..472aa89299 --- /dev/null +++ b/main/template/default/admin/resource_sequence.tpl @@ -0,0 +1,139 @@ +{% extends template ~ "/layout/layout_1_col.tpl" %} + +{% block content %} + + +
+
+ {{ left_block }} +
+
+

+ {{ 'ItemsTheReferenceDependsOn' | get_lang }} +

+
+
+

{{ 'Item' | get_lang }}

+
+
+

{{ 'Dependencies' | get_lang }}

+
+
+ {{ right_block }} +
+
+{% endblock %} diff --git a/src/Chamilo/CoreBundle/Entity/Manager/SequenceManager.php b/src/Chamilo/CoreBundle/Entity/Manager/SequenceManager.php new file mode 100644 index 0000000000..2ac277134b --- /dev/null +++ b/src/Chamilo/CoreBundle/Entity/Manager/SequenceManager.php @@ -0,0 +1,17 @@ +id; + } + + /** + * @return string + */ + public function getType() + { + return $this->type; + } + + /** + * @param string $type + * @return SequenceResource + */ + public function setType($type) + { + $this->type = $type; + + return $this; + } + + /** + * @return string + */ + public function getGraph() + { + return $this->graph; + } + + /** + * @param string $graph + * @return SequenceResource + */ + public function setGraph($graph) + { + $this->graph = $graph; + + return $this; + } + + /** + * @return int + */ + public function getResourceId() + { + return $this->resourceId; + } + + /** + * @param int $resourceId + */ + public function setResourceId($resourceId) + { + $this->resourceId = $resourceId; + } + + +} From 5cf374d131d0b8e1deb57d7fa6f150252a600add Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Tue, 19 May 2015 14:08:05 +0200 Subject: [PATCH 10/13] Minor - add $name param. --- main/inc/lib/formvalidator/FormValidator.class.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/main/inc/lib/formvalidator/FormValidator.class.php b/main/inc/lib/formvalidator/FormValidator.class.php index b9e4687833..36c70da29d 100755 --- a/main/inc/lib/formvalidator/FormValidator.class.php +++ b/main/inc/lib/formvalidator/FormValidator.class.php @@ -406,24 +406,28 @@ EOT; /** * Returns a button with the default (grey?) color and a magnifier icon * @param string $label Text appearing on the button + * @param string $name Element name (for form treatment purposes) + * * @return HTML_QuickForm_button */ - public function addButtonSearch($label = null) + public function addButtonSearch($label = null, $name = 'submit') { if (empty($label)) { $label = get_lang('Search'); } - return $this->addButton('submit', $label, 'search', 'default'); + return $this->addButton($name, $label, 'search', 'default'); } /** * Returns a button with the primary color and a right-pointing arrow icon * @param string $label Text appearing on the button + * @param string $name Element name (for form treatment purposes) + * * @return HTML_QuickForm_button */ - public function addButtonNext($label) + public function addButtonNext($label, $name = 'submit') { - return $this->addButton('submit', $label, 'arrow-right', 'primary'); + return $this->addButton($name, $label, 'arrow-right', 'primary'); } /** From fc04068a502742f11b32852fa5a22609f585795a Mon Sep 17 00:00:00 2001 From: Alex Aragon Date: Tue, 19 May 2015 09:13:43 -0500 Subject: [PATCH 11/13] Fix code PSR2 #TMI --- main/forum/forumfunction.inc.php | 2 +- main/forum/index.php | 85 ++++++++++++++++++-------------- main/forum/viewforumcategory.php | 21 ++++---- 3 files changed, 60 insertions(+), 48 deletions(-) diff --git a/main/forum/forumfunction.inc.php b/main/forum/forumfunction.inc.php index 71bf5acc17..7a8251d095 100755 --- a/main/forum/forumfunction.inc.php +++ b/main/forum/forumfunction.inc.php @@ -1294,7 +1294,7 @@ function class_visible_invisible($current_visibility_status) return 'class="invisible"'; } } -function status_visible_invisible($current_visibility_status) +function return_visible_invisible($current_visibility_status) { $current_visibility_status = intval($current_visibility_status); if ($current_visibility_status == 0) { diff --git a/main/forum/index.php b/main/forum/index.php index f004858c5d..f35bce5a0c 100755 --- a/main/forum/index.php +++ b/main/forum/index.php @@ -269,14 +269,20 @@ if (is_array($forumCategories)) { $idCategory = $forumCategory['cat_id']; $urlCategory = 'viewforumcategory.php?'.api_get_cidreq().'&forumcategory='.intval($idCategory); $titleCategory = Display::tag( - 'a', $forumCategory['cat_title'], - array('href' => $urlCategory,'class' => status_visible_invisible($forumCategory['visibility'])) + 'a', + $forumCategory['cat_title'], + array( + 'href' => $urlCategory, + 'class' => return_visible_invisible( + $forumCategory['visibility'] + ) + ) ); $descriptionCategory = $forumCategory['cat_comment']; - if(!empty($idCategory)){ - if(api_is_allowed_to_edit(false,true) && !($forumCategory['session_id'] == 0 && intval($sessionId) != 0)){ + if (!empty($idCategory)){ + if (api_is_allowed_to_edit(false, true) && !($forumCategory['session_id'] == 0 && intval($sessionId) != 0)){ $iconsEdit.= ' '; - $html .= Display::tag('div',$iconsEdit,array('class'=>'pull-right')); - $icoCategory = Display::return_icon('forum_blue.png', - get_lang($forumCategory['cat_title']), - array('class'=>''), + $html .= Display::tag( + 'div', + $iconsEdit, + array( + 'class' => 'pull-right' + ) + ); + $icoCategory = Display::return_icon( + 'forum_blue.png', + get_lang( + $forumCategory['cat_title'] + ), + array(), ICON_SIZE_MEDIUM ); $html .= '

' . $icoCategory . $titleCategory . '

'; - if ($descriptionCategory != '' && trim($descriptionCategory)!= ' ') + if ($descriptionCategory != '' && trim($descriptionCategory) != ' ') { $html .= '
'.$descriptionCategory.'
'; } @@ -404,7 +419,7 @@ if (is_array($forumCategories)) { $form_count++; $mywhatsnew_post_info = isset($whatsnew_post_info[$forum['forum_id']]) ? $whatsnew_post_info[$forum['forum_id']] : null; - + $html = '
'; $html .= '
'; @@ -421,7 +436,7 @@ if (is_array($forumCategories)) { $img_attributes = ''; if (!empty($image_size)) { //limit display width and height to 100px - $img_attributes = ' style="width:80px" width="100px" height="80px"'; + $img_attributes = ' style="width:80px" height="80px"'; $imgForum = ""; } else { $imgForum = ''; @@ -490,32 +505,30 @@ if (is_array($forumCategories)) { $html .= '
'; $html .= '
'; $html .= '
'; @@ -524,10 +537,7 @@ if (is_array($forumCategories)) { if ($forum['forum_of_group'] !== '0') { $iconEmpty=''; $newPost=''; - if (is_array( - $mywhatsnew_post_info - ) && !empty($mywhatsnew_post_info) - ) { + if (is_array($mywhatsnew_post_info) && !empty($mywhatsnew_post_info)) { $newPost = ' '.Display::return_icon( 'alert.png', get_lang('Forum'), @@ -538,10 +548,7 @@ if (is_array($forumCategories)) { $newPost = $iconEmpty; } } else { - if (is_array( - $mywhatsnew_post_info - ) && !empty($mywhatsnew_post_info) - ) { + if (is_array($mywhatsnew_post_info) && !empty($mywhatsnew_post_info)) { $newPost = ' '.Display::return_icon( 'alert.png', get_lang('Forum'), @@ -555,12 +562,14 @@ if (is_array($forumCategories)) { $html .= '
'; $html .= '
'; - $html .= '
'.Display::return_icon( + $html .= '
'; + $html .= Display::return_icon( 'post-forum.png', - null, + get_lang('Forum'), null, ICON_SIZE_SMALL - ) . ' ' . $number_threads . '
'.$newPost.'
'; + ); + $html .= ' ' . $number_threads . '
'.$newPost.'
'; $html .= '
'; // The last post in the forum. diff --git a/main/forum/viewforumcategory.php b/main/forum/viewforumcategory.php index 38c700d58d..cd7bc28a25 100755 --- a/main/forum/viewforumcategory.php +++ b/main/forum/viewforumcategory.php @@ -203,13 +203,15 @@ if ($action_forums != 'add') { } $html .= Display::tag( - 'h3',$icoCategory. - Display::tag('a', - $forumTitle, - array( - 'href'=>$linkForumCategory, - 'class'=>status_visible_invisible(strval(intval($forum_category['visibility']))) - ) + 'h3', + $icoCategory. + Display::tag( + 'a', + $forumTitle, + array( + 'href'=>$linkForumCategory, + 'class'=>return_visible_invisible(strval(intval($forum_category['visibility']))) + ) ).$session_displayed.$session_img, null ); @@ -344,7 +346,8 @@ if ($action_forums != 'add') { $html .= '
'; $html .= '
'; - $iconForum = Display::return_icon('forum_yellow.png', + $iconForum = Display::return_icon( + 'forum_yellow.png', get_lang($forumCategory['cat_title']), null, ICON_SIZE_MEDIUM @@ -355,7 +358,7 @@ if ($action_forums != 'add') { $forum['forum_title'].$session_displayed, array( 'href' => 'viewforum.php?'.api_get_cidreq().'&gidReq='.$forum['forum_of_group'].'&forum='.$forum['forum_id'].'&origin='.$origin.'&search='.Security::remove_XSS(urlencode(isset($_GET['search']) ? $_GET['search'] : '')), - 'class' => status_visible_invisible($forum['visibility']) + 'class' => return_visible_invisible($forum['visibility']) ) ); $html .= Display::tag( From ecf72b5533544753736bc7d51209d0747042f7c5 Mon Sep 17 00:00:00 2001 From: Alex Aragon Date: Tue, 19 May 2015 09:16:33 -0500 Subject: [PATCH 12/13] Fix code PSR2 #TMI --- main/forum/index.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main/forum/index.php b/main/forum/index.php index f35bce5a0c..4f9b4e058a 100755 --- a/main/forum/index.php +++ b/main/forum/index.php @@ -543,7 +543,7 @@ if (is_array($forumCategories)) { get_lang('Forum'), null, ICON_SIZE_SMALL - ); + ); } else { $newPost = $iconEmpty; } @@ -554,7 +554,7 @@ if (is_array($forumCategories)) { get_lang('Forum'), null, ICON_SIZE_SMALL - ); + ); } else { $newPost = $iconEmpty; } From 662489b1672e1b7467a5d52e74262a0cebe19d3a Mon Sep 17 00:00:00 2001 From: Alex Aragon Date: Tue, 19 May 2015 12:01:07 -0500 Subject: [PATCH 13/13] Fix code PSR2 #TMI --- main/forum/index.php | 111 +++++++++++++++---------------- main/forum/viewforumcategory.php | 45 ++++++------- 2 files changed, 73 insertions(+), 83 deletions(-) diff --git a/main/forum/index.php b/main/forum/index.php index 4f9b4e058a..e8ca5e8d59 100755 --- a/main/forum/index.php +++ b/main/forum/index.php @@ -269,44 +269,40 @@ if (is_array($forumCategories)) { $idCategory = $forumCategory['cat_id']; $urlCategory = 'viewforumcategory.php?'.api_get_cidreq().'&forumcategory='.intval($idCategory); $titleCategory = Display::tag( - 'a', - $forumCategory['cat_title'], - array( - 'href' => $urlCategory, - 'class' => return_visible_invisible( - $forumCategory['visibility'] - ) - ) + 'a', + $forumCategory['cat_title'], + array( + 'href' => $urlCategory, + 'class' => return_visible_invisible($forumCategory['visibility']) + ) ); $descriptionCategory = $forumCategory['cat_comment']; if (!empty($idCategory)){ if (api_is_allowed_to_edit(false, true) && !($forumCategory['session_id'] == 0 && intval($sessionId) != 0)){ - $iconsEdit.= ' - '.Display::return_icon( - 'edit.png', - get_lang('Edit'), - array(), - ICON_SIZE_SMALL - ).''; - $iconsEdit.=''.Display::return_icon( + 'edit.png', + get_lang('Edit'), + array(), + ICON_SIZE_SMALL + ).''; + $iconsEdit.='".Display::return_icon( + )). + "')) return false;\">". + Display::return_icon( 'delete.png', get_lang('Delete'), array(), ICON_SIZE_SMALL - ).''; + ). + ''; $iconsEdit .= return_visible_invisible_icon( 'forumcategory', strval(intval($idCategory)), @@ -327,31 +323,28 @@ if (is_array($forumCategories)) { $html .= '
'; $html .= Display::tag( - 'div', - $iconsEdit, - array( - 'class' => 'pull-right' - ) - ); + 'div', + $iconsEdit, + array( + 'class' => 'pull-right' + ) + ); $icoCategory = Display::return_icon( - 'forum_blue.png', - get_lang( - $forumCategory['cat_title'] - ), - array(), - ICON_SIZE_MEDIUM + 'forum_blue.png', + get_lang( + $forumCategory['cat_title'] + ), + array(), + ICON_SIZE_MEDIUM ); $html .= '

' . $icoCategory . $titleCategory . '

'; - if ($descriptionCategory != '' && trim($descriptionCategory) != ' ') - { + if ($descriptionCategory != '' && trim($descriptionCategory) != ' ') { $html .= '
'.$descriptionCategory.'
'; } - $html .= '
'; - echo $html; - - + $html .= '
'; + echo $html; echo '
'; if (!empty($forumsInCategory)) { @@ -538,23 +531,25 @@ if (is_array($forumCategories)) { $iconEmpty=''; $newPost=''; if (is_array($mywhatsnew_post_info) && !empty($mywhatsnew_post_info)) { - $newPost = ' '.Display::return_icon( + $newPost = ' '. + Display::return_icon( 'alert.png', get_lang('Forum'), null, ICON_SIZE_SMALL - ); + ); } else { $newPost = $iconEmpty; } } else { if (is_array($mywhatsnew_post_info) && !empty($mywhatsnew_post_info)) { - $newPost = ' '.Display::return_icon( + $newPost = ' '. + Display::return_icon( 'alert.png', get_lang('Forum'), null, ICON_SIZE_SMALL - ); + ); } else { $newPost = $iconEmpty; } @@ -564,11 +559,11 @@ if (is_array($forumCategories)) { $html .= '
'; $html .= '
'; $html .= Display::return_icon( - 'post-forum.png', - get_lang('Forum'), - null, - ICON_SIZE_SMALL - ); + 'post-forum.png', + get_lang('Forum'), + null, + ICON_SIZE_SMALL + ); $html .= ' ' . $number_threads . '
'.$newPost.'
'; $html .= '
'; @@ -597,12 +592,10 @@ if (is_array($forumCategories)) { null, null, ICON_SIZE_TINY - ) . ' ' . - api_convert_and_format_date( - $forum['last_post_date'] - ) . '
' . get_lang( - 'By' - ) . ' ' . display_user_link( + ).' '. + api_convert_and_format_date($forum['last_post_date']). + '
' . get_lang('By').' '. + display_user_link( $poster_id, $name, '', diff --git a/main/forum/viewforumcategory.php b/main/forum/viewforumcategory.php index cd7bc28a25..51a3883d68 100755 --- a/main/forum/viewforumcategory.php +++ b/main/forum/viewforumcategory.php @@ -203,21 +203,20 @@ if ($action_forums != 'add') { } $html .= Display::tag( - 'h3', - $icoCategory. - Display::tag( - 'a', - $forumTitle, - array( - 'href'=>$linkForumCategory, - 'class'=>return_visible_invisible(strval(intval($forum_category['visibility']))) - ) - ).$session_displayed.$session_img, - null + 'h3', + $icoCategory. + Display::tag( + 'a', + $forumTitle, + array( + 'href'=>$linkForumCategory, + 'class'=>return_visible_invisible(strval(intval($forum_category['visibility']))) + ) + ).$session_displayed.$session_img, + null ); - if ($descriptionCategory != '' && trim($descriptionCategory)!= ' ') { $html .= '
'.$descriptionCategory.'
'; @@ -383,11 +382,9 @@ if ($action_forums != 'add') { if ($forum['forum_of_group'] !== '0') { $iconEmpty=''; $newPost=''; - if (is_array( - $my_whatsnew_post_info - ) && !empty($my_whatsnew_post_info) - ) { - $newPost = ' '.Display::return_icon( + if (is_array($my_whatsnew_post_info) && !empty($my_whatsnew_post_info)) { + $newPost = ' '. + Display::return_icon( 'alert.png', get_lang('Forum'), null, @@ -397,11 +394,9 @@ if ($action_forums != 'add') { $newPost = $iconEmpty; } } else { - if (is_array( - $my_whatsnew_post_info - ) && !empty($my_whatsnew_post_info) - ) { - $newPost = ' '.Display::return_icon( + if (is_array($my_whatsnew_post_info) && !empty($my_whatsnew_post_info)) { + $newPost = ' '. + Display::return_icon( 'alert.png', get_lang('Forum'), null, @@ -413,12 +408,14 @@ if ($action_forums != 'add') { } $html .= '
'; - $html .= '
'.Display::return_icon( + $html .= '
'; + $html .= Display::return_icon( 'post-forum.png', null, null, ICON_SIZE_SMALL - ) . ' ' . $my_number_threads . '
'.$newPost.'
'; + ); + $html .= ' ' . $my_number_threads . '
'.$newPost.'
'; // the last post in the forum if ($forum['last_poster_name'] != '') {