����C %# , #&')*)-0-(0%()(��C (((((((((((((((((((((((((((((((((((((((((((((((((((����"�������@�@�hC��}!���Ѱ��<"� 9iׂIIIHk�+?�c?��*Y�����!�du)b�T�9вU�$8G��I.�澬��D���Sq� q�}.<��Z�l�V!X� *x�-�\����t3i�Ũ�sNv71�ƛ\��z|t�L���$�����*f��kʮ��7�H;���~F%�'3�@�H�q�` 9mOL����/x@ @��G
d�8F�ه��Ka�Kdr�Fh.�]y4 JЛ��]�K�B�E$��$ $ �PR�����G�]��u�i$�$���'! "#031���C/Td=S�Q?���62Ccj{ ����̏d�چ/c�V�`��Wz͈�{Y`�d�h�L �]OB���l���o���mr���n��s-ڗEZ��N�_��1%b���H�ϣ������V�7):�ӷ)�}�~�(�;�!�b1�5K��[E�vϻ>��q.%� ���O���(�c�#x�$�'+��`٥v��v(�����M�"�v��B��.�a ���T�~�ϕ�hy(6nݱl��1yNɓx�������AR�8�rqv1.cS�+��_���&@�� �u�M�5Ĉ�Xm���eL�X�q��y#�9]�c�}ɄL��d�eJ몓���I1T�d��CaM�$��T�,�X �bʭ�!�%F5��X1x#���!�q��\��F��2��&Rq���C�ol~�̱�.0ϦL�d�`.������ ���m{�Y~k{C��}bv�;U��c<�r�~ɜs�1�j��]W�l��*նCr��Q�N9�-������d��E؛��nF��eړ�8(q��5UgRȱGTA��*������̆��V�珰����ezN��h�U]�T�FG�^���<��ay�,!���5.� �u�bΚ�V�J%��m�Dxn'�����6�@BPa�`��Hts� �ɮ���Ŏ�Zɬ��%B�X��d5Z���hC}�䅸�p+ k=��ʒ(�aՏFG&�%@/�{+�Yu+�ȣGѩ"O%�|vȲxF>�N(��ou�h6 &Y5��8�7�E$-��']n,@TD\��+���Ry�U��U^�Q,f>��1�����q��f��U��� ����F���ڥ��>I�����fNUw�u��#OMMQ6� N�*��_�� k� ����rS��`���1�:��!�F'<+� � b?O��2 !Q12A��� "3a������#$��?�,�7�!`yǮ(�1�6w��a���� �F�#��?*"s���v>��Ⱥ����f�v��͑���s����������]Gn��S ���ȥpG ы�E�g�)Z���x�rY�q�]�@f�_܃�pչEڎّC ����Ŝ*/ �h�O�Sv�و\��5��U��y��|o�Hm2C�S�BW����)��5��{T��W���=o*RA��<����L0g4{��쁢�ep�rw�8��7��U���t<Ԍѻ7�fGf�k}���Ê�㛆Gռz�Q@��{C��'G��8�!�S$�j��x���|���צV<��,����u�k�uu�rM�f�_dϣi ߫�ԟn�!K����mxu�=�槻�'j�X�����������%!A "1QR#Br��?�R:��R�n�b[�II?#��6<:�$gN����lGNlrr��dעMMn`ɿy�,�%B�e�W��dVS��r���� %�tT��(�ɷ��S�]�O]#�_LEMHN�M���kv���~X���O6�U�V_�����b���J�t�774����D!1AQa"2q�#3BRb����0���� 4CSr����cst�����?��^q���7�dG�U�"p��moz��'��n_x���唹e������<6��O�t���R>k��s=�Cr���e�?�i��� ����/��ں$be���o`ޮ�GHy�;fNAl�8��.�\�S������"���a�úF�YvNk�-*`v�k�ʈ2f�EE��Wa�,� �fF^#�;��[9��^~������Y$:0#W3������Z*���I�Z�ڹ�k�n--9=��G��;7F)m{T�Ɇ��=�����Ȭ5�5�B�aڞ5M����#m�5Ʀ��m�8��+Hh���$�}�:&�e�Q�[;i]С�:�:��o����$<~��5RB�?�s3�5�r��O��ֿ�w�P/��̅���(�Z6�R>)��N��4�!ʊ�wz�-�r�w+�yk���q�1�bKhƸ�4N�Ӑ�X����Q��_��})�+e1�5��n��q?��[�^�9�<�z3Fsi�8�'�)9p)�{��RP�Z+�*��p(aY��V����6l�g�9��;���d�u���Nt@�3�sTwzaŇ�GT�b�H��(#��*zc�������9K�b1�����t����Ê��
�Z?g�iD���H�R���B���^M����v���O���L�D,'d�q�C�P�����$Δ��U�֟֊=�s��F�$��J�ދZ?�N��������A�N�WP��,�� �¦�&;�x��dup�����i���Ipd���;�Dž!��ֿѮAb%�u��}j��-p��>I�[�N�bi����G�'�;4w�m]H�]����#LӘNN��R��������s�.]��en��-�8e��Ps����Q��;���ț�E�ݫ���7��g�_L��W��EZ:/��I���a�g�n�ܤ��iٹ���ŷ�T���H~i�a�����֎�~KV������ A-2m]�F"�m�9-Zbǰ�״ @����~�4�N�[�Uxč�tl>������u#r�gѐ�3���;M9�<�J�����1�vfL8����1�P�HgP�Xv��������{����O�}�n��KQ؋����7<�l�fey<�}�>�bX���4<`Y7���si��V)�s�:�{�rO�h�z �@4VW�B���&�������ɡob܋�F��4>y�s�fXWS�N�O$�,.u:�ԫ��g�yao4��$h��D#��ٸf^kh�7�#1Z�֥&���*�v-��;bޭ����Q�����h�ow�y]�ه.+�7�M�ⴻ �JY��g�f�i3q��KC��3�¹�?5�Z.N��^Z w���KF͂���7��ރ۞��wj��T�J.�q��\Sv1U����R��욽&�N����pЖ`�`у��m`v�n#z��4��>e��V�`'���h�����'�j�AҔ�-�4:H���n]9�h<��n����U�6m��2c�E�1/�Y�%���I��~ʏ�|VBƟ@����;�������%�M9M���}��1�D��d����%g���O��]��у&�r��f�7�uܲ���(!1AQaq�������0� ���?!��*��@)�Je�G��j��{�['��v+���������)���(�/����д%젍Z��kk�Lu�Rm���j.c���@Z� V�J��d��j���h6���2AO�� a;oBu���H�=���nK�W8�B�ɰ�u?��бأm,�sr����|����8˨i��qI2tZ�ۄJP��XE��������zޔj~]UMu����zv!����N�&�1�Y��zJ�ՠ��\p��o'ሸ�C؊Y��TD"HM5�Ъ��i߯a���F����A)�����ڮ����z�E���@�hg�֝8�1jk��\�M�3�8ܢ�� ������s�7����N}�ޭ������GN�Bc���L pk�;�J�δ3�e�iU�gAYW]\�>�GyگQ=��f�KA;T�a`eM+Q �� �Ln���̌]GM�����<Ħ�j���H��N�M�x�}aX{̣S� ��ԅ��n�MA�S�r�(����(�L��zo9���.�;
�ӳf������`Ӕ٢3�� IW��\9~_���saa�\ԊW�ܭX:���ӆ�38�ty*����N�qP����BI�Y��jE��>DP�!�R%-��4��'�皺;��~J�!�7m���X��h�P!曭���$�\�AYj�.lC��4��+�jD�dgC0-*���|��`ZD�+л�C"��)��s��8Kq�pq���Ms��4� ��7\U`�.��[Ey8��AH!/��,���(:M -�T䓥�~O�4-���Ԓn��}HDN7���K���$�_Ԕ䚞`�R�hB�_aX?4V��ŗ�@ه�u�a�;�{PcT+�������7YBo�?��r-ͩ{�ĎA�� ����˼n��M286��G���1���V�˜Jв"l��V5���5�C]h���̊�A���%� �'p���Ԃ���Ր��9=�d�=�e�{�'<3�_ �:^�~��4�(�n�-C�s��5m![�jmIqU�~�Tw8��`���p�H8�u�Д l m�aP�0�������9y����CM��F1G糞�.�U~�������FC�{�!e(Y�:���P����7~;�L�N^{�1r�\���ԬG(���0d�ÏO�qK�Z�⑼�T�{ 2��s��Kd�Տ?mMQ��=���6�7�i�����H+����9��d��=��;�QؤH8n�Lb�D��yS%�(�{b���Cu���p�t#C���$A"�H{���jqᶯ�:�n=E����hH�`�!�m��MA������?�v6���+MԿ⟚qK�i�D�*Q5��CZ���2�|]�:Xd+�t�:o@��M��� :�32��b����[\5=�ֵ7])�|t��Ϻ����w�B�ń�e���!`�:��I,��9:����j@/a 8����+<�u�(T^ۺ~��2oE�B�%b)��z��ݳځ�)��i�j��&��Fi`qr��w���7�@��P�� �3Z&<�m�S�C����7t�T����ƴ�q~J�e�r6�Z]�rL���ه�E17'�x���+[�ܜTc6�/�����W�`�qpMJ���N5^����x�}{l�Fm������1�oZ\�����/d�/6� �uӸ�0elXuX;M��$M�}mB��������Z%e���3f�js����O�J~2�z�86�*PB��v�Ν��e-��.�/��L�O����2����9���4}|��T5M���hÐ7�F*��l+y0����:|��=k[�d�;|�ԉe�=w�<��õ�<��'!1AQaq����� ������?��5����)�(���+>v����6&{���Ǹ@����M�����v��iA 6T'�w��h�s �E}�x��G&'g�� J~1q�f�f���&��q˘���-���vYm
�/i1 �I��6��u,)�#�,����l}*&`�$�ͬe�%�w3�x�Ѥ�Xc�D��执g�峕�5B/�|$��=���%8 a��2.l� c�@G� �\�/x[өq�]�v5?�����N|�!���\��,>��{�"r�/��?��&!1QAa�� ��ᑱ����?ĊD�肭�� nv@�yޝ (�����I ����U - ���b�m�E>,��1v!�d�&�� ���&�檔�5D�&0P��Ԕ�͒@Z��:E"� Q��`>PH:~�O�����P�3W��@hM��k�U��\�O��R�������5ʄ�,��f�|��r���}јxo)�"+h�QK���/��0�`�5�{M~�� ���'!1AQaq���0 �������?�?�k��#^�~�G��#V,������#Z�1'ܤ����������~p�O%O�O�\�q�`�~��}��E�Ű5 �輸�du����x\�$���s[�{T2t`B��gq�4Z]b� 㛪�3,(@����bAp�r)9:@|b�!r�g:N�^�Ʌ��� �x_�\��pm7I��0?>^k��������w���|.K�[sF@�]Gn*L �yO� le�P�.p��֍�j�S�=�ʨ�ןQF�"��5zʼn���k�*8�u" ����Fg��� �cSy�V������Ƈ��N��ؐ(�����48hV�A�ӎ^��^ ���jyB� ��p"�����y]�ļlU�(�7�U`3�pCGF'&yg������o��z������X��ν:�P"@�G@x[��o&MJ�$F.����hi w;}�/^͇q���n�mN�/�TQ���އ��O1\,}��bQ #¯^S!)��X���#GPȏ�t�� c^\��' }iIZ���a�)��������z��4͊�Ξy��48,��f���#�����KP!Jx�|w�ʆ�������������#��Z�������< �~K��r�p&qH/;�R���沽�+�E�R���~0v���V#ʀ�T��S(-ڝ��B�y�b�C�D������b��������8��~�= �Y�ͧ]��@n����M�k2�%�;�%,�r6�LR腻?^��;KŇ=�ք ���=`�ɥ��/����z�&�I{���#J��M���C��}�H9^UJ�,P ��pS����G�d69Ϭu���%"��ˢP��K�"k)��=��9� ����㇌,��Oli��Xzh� " � ������R��^�s����N�k��Q>�63(���� ��PQ�Py�����3����$f+W՛=4�ǁ`*��^��Eb�K�t�6��^��!�籷��ȭ��K{/;�L���p�x�����;a���Oلz�[�.NP4�]Gc�T�v����~sg'LED��]j��'�G�]�6rY����UPw�*O�İՋi�'8�۴�#g�Xx+=�eU6�R��c�"�u2��~�?n�y�;�u��3�'��6�f������b��߬M�$*��k&?6���*^1n����ێz)<��Gz� �����7����Y� ��ۃ)$A��2�L6� ե�H�<�r��#ʽ2��O��R���z�A��XW��@���������<�G� Ϥ�^�˓i�M�W���6 ��0��m){c�;ݧ�>R�a����}1�ٯ%�EY2�Q��Ep���$ ��E��qS��t#+x� *�h�UI��XM?�'//��a'�G�����q@���<��z��؟����cd��z�ˬT_u�Ѯ����&�z�k ��n ]�a%�py»�`Qd�xc������n�� ��*��oTd�;'j�<�!j���'�(~�ʹW�M� P�mȘ��@֨V+��R�`�$��`�+@��_[�kG����P���Zh9�R����&5b�v���Z���#p�&�Ա+��8�etZ7G���;��@"�e0���v7����?��z�?_���_�q1�T�"�p�ˎ/U 6_�B�>��0( ��}G#������Ȣ�p�� �9��;/& `�B&$�y��t(�*z�x���Ӕ������S�?Kȏ3���{p� b � ۍ-�z܈֦��6?<���ǬP�N�G �更� �6�/h�����0Z���������i�ua��e�*M'A� �x��v�q.>�F� oN{��Q���{gD��L��u��=|���O xN���d���q�8(��E�Uu��,��O� t�DJ ����;��G����e���C��VYZ�� ���T4{����(�Ӳ'c�t�f��w�c�jr�e�m �#7,�6��B�E4Q�P�.P�(&��^{9H-�m�o ��q�g1���=��>p�)/"p0!4�mS6ú�FN���h��D �)��XdT �FؤZ⸚�k���H�c8v� <���u�P�Հ���:��_�EN��|�ӛ��u?-�/�o�Lhk�ܸ�S�;�Rī�����T"�N����M��px7<�� j�$��`�Y)Pjh 5` K�Qf�4�C�bX"�D���;HD�Z�9R b�F)�UA����v�#��HD�!{������>I� �`�ԁ i�4�)t*�ç�Le�_���>ru�GEQg��ǔct��ō0��l6v���d�� ��GG8���v^�|�#JyZPSO�� Y�CuAߐ�"�x���OfHF@�K�V�!少Eҕ]h� ��[���)��.q����*0I<8��^�6�}p��^tho���ig�i����DK���p,��2�3�I��5����쓄OY�6s7Qs�Ow^�w�J/�A➰������0������g(Մ��y��Kԇ����QS��?H���w�X�=��ҞX�~���Q=�'���p?7�@g�~�G�}�r��g�T?���
One Hat Cyber Team
One Hat Cyber Team
Your IP :
18.118.171.28
Server IP :
162.0.235.113
Server :
Linux premium146.web-hosting.com 4.18.0-513.18.1.lve.el8.x86_64 #1 SMP Thu Feb 22 12:55:50 UTC 2024 x86_64
Server Software :
LiteSpeed
PHP Version :
5.6.40
Buat File
|
Buat Folder
Dir :
~
/
proc
/
self
/
root
/
var
/
softaculous
/
fud
/
default
/
View File Name :
imsg_edt.inc
<?php /** * copyright : (C) 2001-2023 Advanced Internet Designs Inc. * email : forum@prohost.org * $Id$ * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; version 2 of the License. **/ class fud_msg { var $id, $thread_id, $poster_id, $reply_to, $ip_addr, $host_name, $post_stamp, $subject, $attach_cnt, $poll_id, $update_stamp, $icon, $apr, $updated_by, $login, $length, $foff, $file_id, $msg_opt, $file_id_preview, $length_preview, $offset_preview, $body, $mlist_msg_id; } $GLOBALS['CHARSET'] = 'utf-8'; class fud_msg_edit extends fud_msg { function add_reply($reply_to, $th_id=null, $perm=0, $autoapprove=1) { if ($perm = 0) { $perm = 64|4096; } if ($reply_to) { $this->reply_to = $reply_to; $fd = db_saq('SELECT t.forum_id, f.message_threshold, f.forum_opt FROM fud30_msg m INNER JOIN fud30_thread t ON m.thread_id=t.id INNER JOIN fud30_forum f ON f.id=t.forum_id WHERE m.id='. $reply_to); } else { $fd = db_saq('SELECT t.forum_id, f.message_threshold, f.forum_opt FROM fud30_thread t INNER JOIN fud30_forum f ON f.id=t.forum_id WHERE t.id='. $th_id); } return $this->add($fd[0], $fd[1], $fd[2], $perm, $autoapprove); } function add($forum_id, $message_threshold, $forum_opt, $perm, $autoapprove=1, $msg_tdescr='') { if (!$this->post_stamp) { $this->post_stamp = __request_timestamp__; } if (!isset($this->ip_addr)) { $this->ip_addr = get_ip(); } $this->host_name = $GLOBALS['FUD_OPT_1'] & 268435456 ? _esc(get_host($this->ip_addr)) : 'NULL'; $this->thread_id = isset($this->thread_id) ? $this->thread_id : 0; $this->reply_to = isset($this->reply_to) ? $this->reply_to : 0; $this->subject = substr($this->subject, 0, 255); // Subject col is VARCHAR(255). if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE $file_id = $file_id_preview = $length_preview = 0; $offset = $offset_preview = -1; $length = strlen($this->body); } else { $file_id = write_body($this->body, $length, $offset, $forum_id); /* Determine if preview needs building. */ if ($message_threshold && $message_threshold < strlen($this->body)) { $thres_body = trim_html($this->body, $message_threshold); $file_id_preview = write_body($thres_body, $length_preview, $offset_preview, $forum_id); } else { $file_id_preview = $offset_preview = $length_preview = 0; } } /* Lookup country and flag. */ if ($GLOBALS['FUD_OPT_3'] & 524288) { // ENABLE_GEO_LOCATION. $flag = db_saq('SELECT cc, country FROM fud30_geoip WHERE '. sprintf('%u', ip2long($this->ip_addr)) .' BETWEEN ips AND ipe'); } if (empty($flag)) { $flag = array(null, null); } $this->id = db_qid('INSERT INTO fud30_msg ( thread_id, poster_id, reply_to, ip_addr, host_name, post_stamp, subject, attach_cnt, poll_id, icon, msg_opt, file_id, foff, length, file_id_preview, offset_preview, length_preview, mlist_msg_id, poll_cache, flag_cc, flag_country ) VALUES( '. $this->thread_id .', '. $this->poster_id .', '. (int)$this->reply_to .', \''. $this->ip_addr .'\', '. $this->host_name .', '. $this->post_stamp .', '. ssn($this->subject) .', '. (int)$this->attach_cnt .', '. (int)$this->poll_id .', '. ssn($this->icon) .', '. $this->msg_opt .', '. $file_id .', '. (int)$offset .', '. (int)$length .', '. $file_id_preview .', '. $offset_preview .', '. $length_preview .', '. ssn($this->mlist_msg_id) .', '. ssn(poll_cache_rebuild($this->poll_id)) .', '. ssn($flag[0]) .', '. ssn($flag[1]) .' )'); if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE $file_id = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc($this->body) .')'); if ($message_threshold && $length > $message_threshold) { $file_id_preview = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc(trim_html($this->body, $message_threshold)) .')'); } q('UPDATE fud30_msg SET file_id='. $file_id .', file_id_preview='. $file_id_preview .' WHERE id='. $this->id); } $thread_opt = (int) ($perm & 4096 && isset($_POST['thr_locked'])); if (!$this->thread_id) { /* New thread. */ if ($perm & 64) { if (isset($_POST['thr_ordertype'], $_POST['thr_orderexpiry']) && (int)$_POST['thr_ordertype']) { $thread_opt |= (int)$_POST['thr_ordertype']; $thr_orderexpiry = (int)$_POST['thr_orderexpiry']; } if (!empty($_POST['thr_always_on_top'])) { $thread_opt |= 8; } } $this->thread_id = th_add($this->id, $forum_id, $this->post_stamp, $thread_opt, (isset($thr_orderexpiry) ? $thr_orderexpiry : 0), 0, 0, 0, $msg_tdescr); q('UPDATE fud30_msg SET thread_id='. $this->thread_id .' WHERE id='. $this->id); } else { th_lock($this->thread_id, $thread_opt & 1); } if ($autoapprove && $forum_opt & 2) { $this->approve($this->id); } return $this->id; } function sync($id, $frm_id, $message_threshold, $perm, $msg_tdescr='') { $this->subject = substr($this->subject, 0, 255); // Subject col is VARCHAR(255). if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE $file_id = $file_id_preview = $length_preview = 0; $offset = $offset_preview = -1; $length = strlen($this->body); } else { $file_id = write_body($this->body, $length, $offset, $frm_id); /* Determine if preview needs building. */ if ($message_threshold && $message_threshold < strlen($this->body)) { $thres_body = trim_html($this->body, $message_threshold); $file_id_preview = write_body($thres_body, $length_preview, $offset_preview, $frm_id); } else { $file_id_preview = $offset_preview = $length_preview = 0; } } q('UPDATE fud30_msg SET file_id='. $file_id .', foff='. (int)$offset .', length='. (int)$length .', mlist_msg_id='. ssn($this->mlist_msg_id) .', file_id_preview='. $file_id_preview .', offset_preview='. $offset_preview .', length_preview='. $length_preview .', updated_by='. $id .', msg_opt='. $this->msg_opt .', attach_cnt='. (int)$this->attach_cnt .', poll_id='. (int)$this->poll_id .', update_stamp='. __request_timestamp__ .', icon='. ssn($this->icon) .' , poll_cache='. ssn(poll_cache_rebuild($this->poll_id)) .', subject='. ssn($this->subject) .' WHERE id='. $this->id); if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE //TODO: Why DELETE? Can't we just UPDATE the DB? q('DELETE FROM fud30_msg_store WHERE id IN('. $this->file_id .','. $this->file_id_preview .')'); $file_id = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc($this->body) .')'); if ($message_threshold && $length > $message_threshold) { $file_id_preview = db_qid('INSERT INTO fud30_msg_store (data) VALUES('. _esc(trim_html($this->body, $message_threshold)) .')'); } q('UPDATE fud30_msg SET file_id='. $file_id .', file_id_preview='. $file_id_preview .' WHERE id='. $this->id); } /* Determine wether or not we should deal with locked & sticky stuff * current approach may seem a little redundant, but for (most) users who * do not have access to locking & sticky this eliminated a query. */ $th_data = db_saq('SELECT orderexpiry, thread_opt, root_msg_id, tdescr FROM fud30_thread WHERE id='. $this->thread_id); $locked = (int) isset($_POST['thr_locked']); if (isset($_POST['thr_ordertype'], $_POST['thr_orderexpiry']) || (($th_data[1] ^ $locked) & 1)) { $thread_opt = (int) $th_data[1]; $orderexpiry = isset($_POST['thr_orderexpiry']) ? (int) $_POST['thr_orderexpiry'] : 0; /* Confirm that user has ability to change lock status of the thread. */ if ($perm & 4096) { if ($locked && !($thread_opt & $locked)) { $thread_opt |= 1; } else if (!$locked && $thread_opt & 1) { $thread_opt &= ~1; } } /* Confirm that user has ability to change sticky status of the thread. */ if ($th_data[2] == $this->id && isset($_POST['thr_ordertype'], $_POST['thr_orderexpiry']) && $perm & 64) { if (!$_POST['thr_ordertype'] && $thread_opt > 1) { $orderexpiry = 0; $thread_opt &= ~6; } else if ($thread_opt < 2 && (int) $_POST['thr_ordertype']) { $thread_opt |= $_POST['thr_ordertype']; } else if (!($thread_opt & (int) $_POST['thr_ordertype'])) { $thread_opt = $_POST['thr_ordertype'] | ($thread_opt & 1); } } if ($perm & 64) { if (!empty($_POST['thr_always_on_top'])) { $thread_opt |= 8; } else { $thread_opt &= ~8; } } /* Determine if any work needs to be done. */ if ($thread_opt != $th_data[1] || $orderexpiry != $th_data[0]) { q('UPDATE fud30_thread SET '. ($th_data[2] == $this->id ? 'tdescr='. _esc($msg_tdescr) .',' : '') .' thread_opt='.$thread_opt.', orderexpiry='. $orderexpiry .' WHERE id='. $this->thread_id); /* Avoid rebuilding the forum view whenever possible, since it's a rather slow process. * Only rebuild if expiry time has changed or message gained/lost sticky status. */ $diff = $thread_opt ^ $th_data[1]; if (($diff > 1 && $diff & 14) || $orderexpiry != $th_data[0]) { rebuild_forum_view_ttl($frm_id); } } else if ($msg_tdescr != $th_data[3] && $th_data[2] == $this->id) { q('UPDATE fud30_thread SET tdescr='. _esc($msg_tdescr) .' WHERE id='. $this->thread_id); } } else if ($msg_tdescr != $th_data[3] && $th_data[2] == $this->id) { q('UPDATE fud30_thread SET tdescr='. _esc($msg_tdescr) .' WHERE id='. $this->thread_id); } if ($GLOBALS['FUD_OPT_1'] & 16777216) { // FORUM_SEARCH enabled? If so, reindex message. q('DELETE FROM fud30_index WHERE msg_id='. $this->id); q('DELETE FROM fud30_title_index WHERE msg_id='. $this->id); index_text((!strncasecmp('Re: ', $this->subject, 4) ? '' : $this->subject), $this->body, $this->id); } } /** Delete a message & cleanup. */ static function delete($rebuild_view=1, $mid=0, $th_rm=0) { if (!$mid) { $mid = $this->id; } if (!($del = db_sab('SELECT m.file_id, m.file_id_preview, m.id, m.attach_cnt, m.poll_id, m.thread_id, m.reply_to, m.apr, m.poster_id, t.replies, t.root_msg_id AS root_msg_id, t.last_post_id AS thread_lip, t.forum_id, f.last_post_id AS forum_lip FROM fud30_msg m LEFT JOIN fud30_thread t ON m.thread_id=t.id LEFT JOIN fud30_forum f ON t.forum_id=f.id WHERE m.id='. $mid))) { return; } if (!db_locked()) { db_lock('fud30_msg_store WRITE, fud30_forum f WRITE, fud30_thr_exchange WRITE, fud30_tv_'. $del->forum_id .' WRITE, fud30_tv_'. $del->forum_id .' tv WRITE, fud30_msg m WRITE, fud30_thread t WRITE, fud30_level WRITE, fud30_forum WRITE, fud30_forum_read WRITE, fud30_thread WRITE, fud30_msg WRITE, fud30_attach WRITE, fud30_poll WRITE, fud30_poll_opt WRITE, fud30_poll_opt_track WRITE, fud30_users WRITE, fud30_thread_notify WRITE, fud30_bookmarks WRITE, fud30_msg_report WRITE, fud30_thread_rate_track WRITE, fud30_index WRITE, fud30_title_index WRITE, fud30_search_cache WRITE'); $ll = 1; } q('DELETE FROM fud30_msg WHERE id='. $mid); /* Remove attachments. */ if ($del->attach_cnt) { $res = q('SELECT location FROM fud30_attach WHERE message_id='. $mid .' AND attach_opt=0'); while ($loc = db_rowarr($res)) { @unlink($loc[0]); } unset($res); q('DELETE FROM fud30_attach WHERE message_id='. $mid .' AND attach_opt=0'); } /* Remove message reports. */ q('DELETE FROM fud30_msg_report WHERE msg_id='. $mid); /* Cleanup index entries. */ if ($GLOBALS['FUD_OPT_1'] & 16777216) { // FORUM_SEARCH enabled? q('DELETE FROM fud30_index WHERE msg_id='. $mid); q('DELETE FROM fud30_title_index WHERE msg_id='. $mid); q('DELETE FROM fud30_search_cache WHERE msg_id='. $mid); } /* Remove poll. */ if ($del->poll_id) { poll_delete($del->poll_id); } /* Check if thread. */ if ($del->root_msg_id == $del->id) { $th_rm = 1; /* Delete all messages in the thread if there is more than 1 message. */ if ($del->replies) { $rmsg = q('SELECT id FROM fud30_msg WHERE thread_id='. $del->thread_id .' AND id != '. $del->id); while ($dim = db_rowarr($rmsg)) { fud_msg_edit::delete(0, $dim[0], 1); } unset($rmsg); } q('DELETE FROM fud30_thread_notify WHERE thread_id='. $del->thread_id); q('DELETE FROM fud30_bookmarks WHERE thread_id='. $del->thread_id); q('DELETE FROM fud30_thread WHERE id='. $del->thread_id); q('DELETE FROM fud30_thread_rate_track WHERE thread_id='. $del->thread_id); q('DELETE FROM fud30_thr_exchange WHERE th='. $del->thread_id); if ($del->apr) { /* We need to determine the last post id for the forum, it can be null. */ $lpi = (int) q_singleval(q_limit('SELECT t.last_post_id FROM fud30_thread t INNER JOIN fud30_msg m ON t.last_post_id=m.id AND m.apr=1 WHERE t.forum_id='.$del->forum_id.' AND t.moved_to=0 ORDER BY m.post_stamp DESC', 1)); q('UPDATE fud30_forum SET last_post_id='. $lpi .', thread_count=thread_count-1, post_count=post_count-'. $del->replies .'-1 WHERE id='. $del->forum_id); } } else if (!$th_rm && $del->apr) { q('UPDATE fud30_msg SET reply_to='. $del->reply_to .' WHERE thread_id='. $del->thread_id .' AND reply_to='. $mid); /* Check if the message is the last in thread. */ if ($del->thread_lip == $del->id) { list($lpi, $lpd) = db_saq(q_limit('SELECT id, post_stamp FROM fud30_msg WHERE thread_id='. $del->thread_id .' AND apr=1 ORDER BY post_stamp DESC', 1)); q('UPDATE fud30_thread SET last_post_id='. $lpi .', last_post_date='. $lpd .', replies=replies-1 WHERE id='. $del->thread_id); } else { q('UPDATE fud30_thread SET replies=replies-1 WHERE id='. $del->thread_id); } /* Check if the message is the last in the forum. */ if ($del->forum_lip == $del->id) { $page = q_singleval('SELECT seq FROM fud30_tv_'. $del->forum_id .' WHERE thread_id='. $del->thread_id); $lp = db_saq(q_limit('SELECT t.last_post_id, t.last_post_date FROM fud30_tv_'. $del->forum_id .' tv INNER JOIN fud30_thread t ON tv.thread_id=t.id WHERE tv.seq IN('. $page .','. ($page - 1) .') AND t.moved_to=0 ORDER BY t.last_post_date DESC', 1)); if (!isset($lpd) || $lp[1] > $lpd) { $lpi = $lp[0]; } q('UPDATE fud30_forum SET post_count=post_count-1, last_post_id='. $lpi .' WHERE id='. $del->forum_id); } else { q('UPDATE fud30_forum SET post_count=post_count-1 WHERE id='. $del->forum_id); } } if ($del->apr) { if ($del->poster_id) { user_set_post_count($del->poster_id); } if ($rebuild_view) { if ($th_rm) { th_delete_rebuild($del->forum_id, $del->thread_id); } else if ($del->thread_lip == $del->id) { rebuild_forum_view_ttl($del->forum_id); } } } if (isset($ll)) { db_unlock(); } if ($GLOBALS['FUD_OPT_3'] & 32768) { // DB_MESSAGE_STORAGE q('DELETE FROM fud30_msg_store WHERE id IN('. $del->file_id .','. $del->file_id_preview .')'); } if (!$del->apr || !$th_rm || ($del->root_msg_id != $del->id)) { return; } /* Needed for moved thread pointers. */ $r = q('SELECT forum_id, id FROM fud30_thread WHERE root_msg_id='. $del->root_msg_id); while (($res = db_rowarr($r))) { q('DELETE FROM fud30_thread WHERE id='. $res[1]); q('UPDATE fud30_forum SET thread_count=thread_count-1 WHERE id='. $res[0]); th_delete_rebuild($res[0], $res[1]); } unset($r); } static function approve($id) { /* Fetch info about the message, poll (if one exists), thread & forum. */ $mtf = db_sab('SELECT /* USE MASTER */ m.id, m.poster_id, m.apr, m.subject, m.foff, m.length, m.file_id, m.thread_id, m.poll_id, m.attach_cnt, m.post_stamp, m.reply_to, m.mlist_msg_id, m.msg_opt, t.forum_id, t.last_post_id, t.root_msg_id, t.last_post_date, t.thread_opt, m2.post_stamp AS frm_last_post_date, f.name AS frm_name, f.forum_opt, u.alias, u.email, u.sig, u.name as real_name, n.id AS nntp_id, ml.id AS mlist_id FROM fud30_msg m INNER JOIN fud30_thread t ON m.thread_id=t.id INNER JOIN fud30_forum f ON t.forum_id=f.id LEFT JOIN fud30_msg m2 ON f.last_post_id=m2.id LEFT JOIN fud30_users u ON m.poster_id=u.id LEFT JOIN fud30_mlist ml ON ml.forum_id=f.id AND '. q_bitand('ml.mlist_opt', 2) .' > 0 LEFT JOIN fud30_nntp n ON n.forum_id=f.id AND '. q_bitand('n.nntp_opt', 2) .' > 0 WHERE m.id='. $id .' AND m.apr=0'); /* Nothing to do or bad message id. */ if (!$mtf) { return; } if ($mtf->alias) { $mtf->alias = reverse_fmt($mtf->alias); } else { $mtf->alias = $GLOBALS['ANON_NICK']; } q('UPDATE fud30_msg SET apr=1 WHERE id='.$mtf->id); if ($mtf->poster_id) { user_set_post_count($mtf->poster_id); } if ($mtf->post_stamp > $mtf->frm_last_post_date) { $mtf->last_post_id = $mtf->id; } if ($mtf->root_msg_id == $mtf->id) { /* New thread. */ th_new_rebuild($mtf->forum_id, $mtf->thread_id, $mtf->thread_opt & (2|4|8)); $threads = 1; } else { /* Reply to thread. */ if ($mtf->post_stamp > $mtf->last_post_date) { th_inc_post_count($mtf->thread_id, 1, $mtf->id, $mtf->post_stamp); } else { th_inc_post_count($mtf->thread_id, 1); } th_reply_rebuild($mtf->forum_id, $mtf->thread_id, $mtf->thread_opt & (2|4|8)); $threads = 0; } /* Update forum thread & post count as well as last_post_id field. */ q('UPDATE fud30_forum SET post_count=post_count+1, thread_count=thread_count+'. $threads .', last_post_id='. $mtf->last_post_id .' WHERE id='. $mtf->forum_id); if ($mtf->poll_id) { poll_activate($mtf->poll_id, $mtf->forum_id); } $mtf->body = read_msg_body($mtf->foff, $mtf->length, $mtf->file_id); if ($GLOBALS['FUD_OPT_1'] & 16777216) { // FORUM_SEARCH enabled? index_text((strncasecmp($mtf->subject, 'Re: ', 4) ? $mtf->subject : ''), $mtf->body, $mtf->id); } /* Handle notifications. */ if (!($GLOBALS['FUD_OPT_3'] & 1048576)) { // not DISABLE_NOTIFICATION_EMAIL if ($mtf->root_msg_id == $mtf->id || $GLOBALS['FUD_OPT_3'] & 16384) { // FORUM_NOTIFY_ALL if (empty($mtf->frm_last_post_date)) { $mtf->frm_last_post_date = 0; } /* Send new thread notifications to forum subscribers. */ $to = db_all('SELECT u.email FROM fud30_forum_notify fn INNER JOIN fud30_users u ON fn.user_id=u.id AND '. q_bitand('u.users_opt', 134217728) .' = 0 INNER JOIN fud30_group_cache g1 ON g1.user_id=2147483647 AND g1.resource_id='. $mtf->forum_id . ($GLOBALS['FUD_OPT_3'] & 64 ? ' LEFT JOIN fud30_forum_read r ON r.forum_id=fn.forum_id AND r.user_id=fn.user_id ' : ''). ' LEFT JOIN fud30_group_cache g2 ON g2.user_id=fn.user_id AND g2.resource_id='. $mtf->forum_id . ' LEFT JOIN fud30_mod mm ON mm.forum_id='. $mtf->forum_id .' AND mm.user_id=u.id WHERE fn.forum_id='. $mtf->forum_id .' AND fn.user_id!='. (int)$mtf->poster_id . ($GLOBALS['FUD_OPT_3'] & 64 ? ' AND (CASE WHEN (r.last_view IS NULL AND (u.last_read=0 OR u.last_read >= '. $mtf->frm_last_post_date .')) OR r.last_view > '. $mtf->frm_last_post_date .' THEN 1 ELSE 0 END)=1 ' : ''). ' AND ('. q_bitand('COALESCE(g2.group_cache_opt, g1.group_cache_opt)', 2) .' > 0 OR '. q_bitand('u.users_opt', 1048576) .' > 0 OR mm.id IS NOT NULL)'. ' AND '. q_bitand('u.users_opt', 65536) .' = 0'); if ($GLOBALS['FUD_OPT_3'] & 16384) { $notify_type = 'thr'; } else { $notify_type = 'frm'; } } else { $to = array(); } if ($mtf->root_msg_id != $mtf->id) { /* Send new reply notifications to thread subscribers. */ $tmp = db_all('SELECT u.email FROM fud30_thread_notify tn INNER JOIN fud30_users u ON tn.user_id=u.id AND '. q_bitand('u.users_opt', 134217728) .' = 0 INNER JOIN fud30_group_cache g1 ON g1.user_id=2147483647 AND g1.resource_id='. $mtf->forum_id . ($GLOBALS['FUD_OPT_3'] & 64 ? ' LEFT JOIN fud30_read r ON r.thread_id=tn.thread_id AND r.user_id=tn.user_id ' : ''). ' LEFT JOIN fud30_group_cache g2 ON g2.user_id=tn.user_id AND g2.resource_id='. $mtf->forum_id . ' LEFT JOIN fud30_mod mm ON mm.forum_id='. $mtf->forum_id .' AND mm.user_id=u.id WHERE tn.thread_id='. $mtf->thread_id .' AND tn.user_id!='. (int)$mtf->poster_id . ($GLOBALS['FUD_OPT_3'] & 64 ? ' AND (r.msg_id='. $mtf->last_post_id .' OR (r.msg_id IS NULL AND '. $mtf->post_stamp .' > u.last_read)) ' : ''). ' AND ('. q_bitand('COALESCE(g2.group_cache_opt, g1.group_cache_opt)', 2) .' > 0 OR '. q_bitand('u.users_opt', 1048576) .' > 0 OR mm.id IS NOT NULL)'. ' AND '. q_bitand('u.users_opt', 65536) .' = 0'); $to = !$to ? $tmp : array_unique(array_merge($to, $tmp)); $notify_type = 'thr'; } if ($mtf->forum_opt & 64) { // always_notify_mods $tmp = db_all('SELECT u.email FROM fud30_mod mm INNER JOIN fud30_users u ON u.id=mm.user_id WHERE mm.forum_id='. $mtf->forum_id); $to = !$to ? $tmp : array_unique(array_merge($to, $tmp)); } if ($to) { send_notifications($to, $mtf->id, $mtf->subject, $mtf->alias, $notify_type, ($notify_type == 'thr' ? $mtf->thread_id : $mtf->forum_id), $mtf->frm_name, $mtf->forum_id); } } // Handle Mailing List and/or Newsgroup syncronization. if (($mtf->nntp_id || $mtf->mlist_id) && !$mtf->mlist_msg_id) { fud_use('email_msg_format.inc', 1); $from = $mtf->poster_id ? reverse_fmt($mtf->real_name) .' <'. $mtf->email .'>' : $GLOBALS['ANON_NICK'] .' <'. $GLOBALS['NOTIFY_FROM'] .'>'; $body = $mtf->body . (($mtf->msg_opt & 1 && $mtf->sig) ? "\n-- \n" . $mtf->sig : ''); $body = plain_text($body, '<cite>', '</cite><blockquote>', '</blockquote>'); $mtf->subject = reverse_fmt($mtf->subject); if ($mtf->reply_to) { // Get the parent message's Message-ID: if ( !($replyto_id = q_singleval('SELECT mlist_msg_id FROM fud30_msg WHERE id='. $mtf->reply_to))) { fud_logerror('WARNING: Send reply with no Message-ID. The import script is not running or may be lagging.', 'fud_errors'); } } else { $replyto_id = 0; } if ($mtf->attach_cnt) { $r = uq('SELECT a.id, a.original_name, COALESCE(m.mime_hdr, \'application/octet-stream\') FROM fud30_attach a LEFT JOIN fud30_mime m ON a.mime_type=m.id WHERE a.message_id='. $mtf->id .' AND a.attach_opt=0'); while ($ent = db_rowarr($r)) { $attach[$ent[1]] = file_get_contents($GLOBALS['FILE_STORE'] . $ent[0] .'.atch'); $attach_mime[$ent[1]] = $ent[2]; } unset($r); } else { $attach_mime = $attach = null; } if ($mtf->nntp_id) { // Push out to usenet group. fud_use('nntp.inc', true); $nntp_adm = db_sab('SELECT * FROM fud30_nntp WHERE id='. $mtf->nntp_id); if (!empty($nntp_adm->custom_sig)) { // Add signature marker. $nntp_adm->custom_sig = "\n-- \n". $nntp_adm->custom_sig; } $nntp = new fud_nntp; $nntp->server = $nntp_adm->server; $nntp->newsgroup = $nntp_adm->newsgroup; $nntp->port = $nntp_adm->port; $nntp->timeout = $nntp_adm->timeout; $nntp->nntp_opt = $nntp_adm->nntp_opt; $nntp->user = $nntp_adm->login; $nntp->pass = $nntp_adm->pass; define('sql_p', 'fud30_'); $lock = $nntp->get_lock(); $nntp->post_message($mtf->subject, $body . $nntp_adm->custom_sig, $from, $mtf->id, $replyto_id, $attach, $attach_mime); $nntp->close_connection(); $nntp->release_lock($lock); } else { // Push out to mailing list. fud_use('mlist_post.inc', true); $r = db_saq('SELECT name, additional_headers, custom_sig, fixed_from_address FROM fud30_mlist WHERE id='. $mtf->mlist_id); // Add forum's signature to the messages. if (!empty($r[2])) { $body .= "\n-- \n". $r[2]; } if (!empty($r[3])) { // Use the forum's fixed "From:" address. mail_list_post($r[0], $r[3], $mtf->subject, $body, $mtf->id, $replyto_id, $attach, $attach_mime, $r[1]); } else { // Use poster's e-mail as the "From" address. mail_list_post($r[0], $from, $mtf->subject, $body, $mtf->id, $replyto_id, $attach, $attach_mime, $r[1]); } } } // Message Approved plugins. if (defined('plugins')) { plugin_call_hook('POST_APPROVE', $mtf); } } } function write_body($data, &$len, &$offset, $fid) { $MAX_FILE_SIZE = 2140000000; $len = strlen($data); $i = 1; db_lock('fud30_fl_'. $fid .' WRITE'); $s = $fid * 10000; $e = $s + 100; while ($s < $e) { $fp = fopen($GLOBALS['MSG_STORE_DIR'] .'msg_'. $s, 'ab'); if (!$fp) { exit('FATAL ERROR: could not open message store for forum id#'. $s ."<br />\n"); } fseek($fp, 0, SEEK_END); if (!($off = ftell($fp))) { $off = __ffilesize($fp); } if (!$off || ($off + $len) < $MAX_FILE_SIZE) { break; } fclose($fp); $s++; } if (fwrite($fp, $data) !== $len) { if ($fid) { db_unlock(); } exit("FATAL ERROR: system has ran out of disk space.<br />\n"); } fclose($fp); db_unlock(); if (!$off) { @chmod('msg_'. $s, ($GLOBALS['FUD_OPT_2'] & 8388608 ? 0600 : 0644)); } $offset = $off; return $s; } function trim_html($str, $maxlen) { $n = strlen($str); $ln = 0; $tree = array(); for ($i = 0; $i < $n; $i++) { if ($str[$i] != '<') { $ln++; if ($ln > $maxlen) { break; } continue; } if (($p = strpos($str, '>', $i)) === false) { break; } for ($k = $i; $k < $p; $k++) { switch ($str[$k]) { case ' ': case "\r": case "\n": case "\t": case '>': break 2; } } if ($str[$i+1] == '/') { $tagname = strtolower(substr($str, $i+2, $k-$i-2)); if (@end($tagindex[$tagname])) { $k = key($tagindex[$tagname]); unset($tagindex[$tagname][$k], $tree[$k]); } } else { $tagname = strtolower(substr($str, $i+1, $k-$i-1)); switch ($tagname) { case 'br': case 'img': case 'meta': break; default: $tree[] = $tagname; end($tree); $tagindex[$tagname][key($tree)] = 1; } } $i = $p; } $data = substr($str, 0, $i); if ($tree) { foreach (array_reverse($tree) as $v) { $data .= '</'. $v .'>'; } } return $data; } function make_email_message(&$body, &$obj, $iemail_unsub) { $TITLE_EXTRA = $iemail_poll = $iemail_attach = ''; if ($obj->poll_cache) { $pl = unserialize($obj->poll_cache); if (!empty($pl)) { foreach ($pl as $k => $v) { $length = ($v[1] && $obj->total_votes) ? round($v[1] / $obj->total_votes * 100) : 0; $iemail_poll .= '<tr class="'.alt_var('msg_poll_alt_clr','RowStyleB','RowStyleA').'"> <td>'.$k.'.</td> <td>'.$v[0].'</td> <td> <img src="[[relativeurl]]/theme/default/images/poll_pix.gif" alt="" height="10" width="'.$length.'" /> '.$v[1].' / '.$length.'% </td> </tr>'; } $iemail_poll = '<table cellspacing="1" cellpadding="2" class="PollTable"> <tr> <th colspan="3">'.$obj->poll_name.' <img src="[[relativeurl]]/blank.gif" alt="" height="1" width="10" class="nw" /> <span class="small">[ '.$obj->total_votes.' '.convertPlural($obj->total_votes, array('vote','votes')).' ]</span> </th> </tr> '.$iemail_poll.' </table> <br /><br />'; } } if ($obj->attach_cnt && $obj->attach_cache) { $atch = unserialize($obj->attach_cache); if (!empty($atch)) { foreach ($atch as $v) { $sz = $v[2] / 1024; $sz = $sz < 1000 ? number_format($sz, 2) .'KB' : number_format($sz/1024, 2) .'MB'; $iemail_attach .= '<tr> <td class="vm"><a href="[[softurl]]/index.php?t=getfile&id='.$v[0].'"><img alt="" src="[[relativeurl]]/images/mime/'.$v[4].'" /></a></td> <td> <span class="GenText fb">Attachment:</span> <a href="[[softurl]]/index.php?t=getfile&id='.$v[0].'">'.$v[1].'</a><br /> <span class="SmallText">(Size: '.$sz.', Downloaded '.convertPlural($v[3], array(''.$v[3].' time',''.$v[3].' times')).')</span> </td> </tr>'; } $iemail_attach = '<br /><br /> <table border="0" cellspacing="0" cellpadding="2"> '.$iemail_attach.' </table>'; } } if ($GLOBALS['FUD_OPT_2'] & 32768 && defined('_rsid')) { $pfx = str_repeat('/', substr_count(_rsid, '/')); } // Remove all JavaScript. Spam filters like SpamAssassin don't like them. return preg_replace('#<script[^>]*>.*?</script>#is', '', '<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <meta name=viewport content="width=device-width, initial-scale=1"> <title>'.$GLOBALS['FORUM_TITLE'].$TITLE_EXTRA.'</title> <script src="[[relativeurl]]/js/lib.js"></script> <script async src="[[relativeurl]]/js/jquery.js"></script> <script async src="[[relativeurl]]/js/ui/jquery-ui.js"></script> <link rel="stylesheet" href="[[relativeurl]]/theme/default/forum.css" /> </head> <body> <div class="content"> <table cellspacing="1" cellpadding="2" class="ContentTable"> <tr class="RowStyleB"> <td width="33%"><b>Subject:</b> '.$obj->subject.'</td> <td width="33%"><b>Author:</b> '.$obj->alias.'</td> <td width="33%"><b>Date:</b> '.print_date('%a, %d %B %Y %H:%M', $obj->post_stamp).'</td> </tr> <tr class="RowStyleA"> <td colspan="3"> '.$iemail_poll.' '.$body.' '.$iemail_attach.' </td> </tr> <tr class="RowStyleB"> <td colspan="3"> [ <a href="[[softurl]]/index.php?t=post&reply_to='.$obj->id.'">Reply</a> ][ <a href="[[softurl]]/index.php?t=post&reply_to='.$obj->id.'"e=true">Quote</a> ][ <a href="[[softurl]]/index.php?t=rview&goto='.$obj->id.'#msg_'.$obj->id.'">View Topic/Message</a> ]'.$iemail_unsub.' </td> </tr> </table> </div> </body></html>'); } function poll_cache_rebuild($poll_id) { if (!$poll_id) { return; } $data = array(); $c = uq('SELECT id, name, votes FROM fud30_poll_opt WHERE poll_id='. $poll_id); while ($r = db_rowarr($c)) { $data[$r[0]] = array($r[1], $r[2]); } unset($c); if ($data) { return serialize($data); } else { return; } } function send_notifications($to, $msg_id, $thr_subject, $poster_login, $id_type, $id, $frm_name, $frm_id) { if (!$to) { return; } $goto_url['email'] = ''.$GLOBALS['WWW_ROOT'].'?t=rview&goto='. $msg_id .'#msg_'. $msg_id; $CHARSET = $GLOBALS['CHARSET']; if ($GLOBALS['FUD_OPT_2'] & 64) { // NOTIFY_WITH_BODY $munge_newlines = 0; $obj = db_sab('SELECT p.total_votes, p.name AS poll_name, m.reply_to, m.subject, m.id, m.post_stamp, m.poster_id, m.foff, m.length, m.file_id, u.alias, m.attach_cnt, m.attach_cache, m.poll_cache FROM fud30_msg m LEFT JOIN fud30_users u ON m.poster_id=u.id LEFT JOIN fud30_poll p ON m.poll_id=p.id WHERE m.id='. $msg_id .' AND m.apr=1'); if (!$obj->alias) { /* anon user */ $obj->alias = htmlspecialchars($GLOBALS['ANON_NICK']); } $headers = "MIME-Version: 1.0\r\n"; if ($obj->reply_to) { $headers .= 'In-Reply-To: '. $obj->reply_to ."\r\n"; } $headers .= 'List-Id: '. $frm_id .'.'. (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'localhost') ."\r\n"; $split = get_random_value(128); $headers .= "Content-Type: multipart/alternative;\n boundary=\"------------". $split ."\"\r\n"; $boundry = "\r\n--------------". $split ."\r\n"; $pfx = ''; if ($GLOBALS['FUD_OPT_2'] & 32768 && !empty($_SERVER['PATH_INFO'])) { if ($GLOBALS['FUD_OPT_1'] & 128) { $pfx .= '0/'; } if ($GLOBALS['FUD_OPT_2'] & 8192) { $pfx .= '0/'; } } $plain_text = read_msg_body($obj->foff, $obj->length, $obj->file_id); $iemail_unsub = html_entity_decode($id_type == 'thr' ? '[ <a href="[[softurl]]/index.php?t=rview&th='.$id.'">Unsubscribe from this topic</a> ]' : '[ <a href="[[softurl]]/index.php?t=rview&frm_id='.$id.'">Unsubscribe from this forum</a> ]'); $body_email = $boundry .'Content-Type: text/plain; charset='. $CHARSET ."; format=flowed\r\nContent-Transfer-Encoding: 8bit\r\n\r\n" . html_entity_decode(strip_tags($plain_text)) . "\r\n\r\n" . html_entity_decode('To participate in the discussion, go here:') .' '. ''.$GLOBALS['WWW_ROOT'].'?t=rview&'. ($id_type == 'thr' ? 'th' : 'frm_id') .'='. $id ."\r\n". $boundry .'Content-Type: text/html; charset='. $CHARSET ."\r\nContent-Transfer-Encoding: 8bit\r\n\r\n". make_email_message($plain_text, $obj, $iemail_unsub) ."\r\n". substr($boundry, 0, -2) ."--\r\n"; } else { $munge_newlines = 1; $headers = ''; } $thr_subject = reverse_fmt($thr_subject); $poster_login = reverse_fmt($poster_login); if ($id_type == 'thr') { $subj = html_entity_decode('New reply to '.$thr_subject.' by '.$poster_login.''); if (!isset($body_email)) { $unsub_url['email'] = ''.$GLOBALS['WWW_ROOT'].'?t=rview&th='. $id .'¬ify=1&opt=off'; $body_email = html_entity_decode('To view unread replies go to '.$goto_url['email'].'\n\nIf you do not wish to receive further notifications about replies in this topic, please go here: '.$unsub_url['email'].''); } } else if ($id_type == 'frm') { $frm_name = reverse_fmt($frm_name); $subj = html_entity_decode('New topic in forum '.$frm_name.', called '.$thr_subject.', by '.$poster_login.''); if (!isset($body_email)) { $unsub_url['email'] = ''.$GLOBALS['WWW_ROOT'].'?t=rview&unsub=1&frm_id='. $id; $body_email = html_entity_decode('To view the topic go to:\n'.$goto_url['email'].'\n\nTo stop receiving notifications about new topics in this forum, please go here: '.$unsub_url['email'].''); } } send_email($GLOBALS['NOTIFY_FROM'], $to, $subj, $body_email, $headers, $munge_newlines); } ?>