admincp_members.php 144 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: admincp_members.php 35200 2015-02-04 03:50:59Z hypowang $
  7. */
  8. if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
  9. exit('Access Denied');
  10. }
  11. @set_time_limit(600);
  12. if($operation != 'export') {
  13. cpheader();
  14. }
  15. require_once libfile('function/delete');
  16. $_G['setting']['memberperpage'] = 20;
  17. $page = max(1, $_G['page']);
  18. $start_limit = ($page - 1) * $_G['setting']['memberperpage'];
  19. $search_condition = array_merge($_GET, $_POST);
  20. if(!is_array($search_condition['groupid']) && $search_condition['groupid']) {
  21. $search_condition['groupid'][0] = $search_condition['groupid'];
  22. }
  23. foreach($search_condition as $k => $v) {
  24. if(in_array($k, array('action', 'operation', 'formhash', 'confirmed', 'submit', 'page', 'deletestart', 'allnum', 'includeuc','includepost','current','pertask','lastprocess','deleteitem')) || $v === '') {
  25. unset($search_condition[$k]);
  26. }
  27. }
  28. $search_condition = searchcondition($search_condition);
  29. $tmpsearch_condition = $search_condition;
  30. unset($tmpsearch_condition['tablename']);
  31. $member = array();
  32. $tableext = '';
  33. if(in_array($operation, array('ban', 'edit', 'group', 'credit', 'medal', 'access'), true)) {
  34. if(empty($_GET['uid']) && empty($_GET['username'])) {
  35. cpmsg('members_nonexistence', 'action=members&operation='.$operation.(!empty($_GET['highlight']) ? "&highlight={$_GET['highlight']}" : ''), 'form', array(), '<input type="text" name="username" value="" class="txt" />');
  36. }
  37. $member = !empty($_GET['uid']) ? C::t('common_member')->fetch($_GET['uid'], false, 1) : C::t('common_member')->fetch_by_username($_GET['username'], 1);
  38. if(!$member) {
  39. cpmsg('members_edit_nonexistence', '', 'error');
  40. }
  41. $tableext = isset($member['_inarchive']) ? '_archive' : '';
  42. }
  43. if($operation == 'search') {
  44. if(!submitcheck('submit', 1)) {
  45. shownav('user', 'nav_members');
  46. showsubmenu('nav_members', array(
  47. array('search', 'members&operation=search', 1),
  48. array('clean', 'members&operation=clean', 0),
  49. array('nav_repeat', 'members&operation=repeat', 0),
  50. ));
  51. showtips('members_admin_tips');
  52. if(!empty($_GET['vid']) && ($_GET['vid'] > 0 && $_GET['vid'] < 8)) {
  53. $_GET['verify'] = array('verify'.intval($_GET['vid']));
  54. }
  55. showsearchform('search');
  56. if($_GET['more']) {
  57. print <<<EOF
  58. <script type="text/javascript">
  59. $('btn_more').click();
  60. </script>
  61. EOF;
  62. }
  63. } else {
  64. $membernum = countmembers($search_condition, $urladd);
  65. $members = '';
  66. if($membernum > 0) {
  67. $multipage = multi($membernum, $_G['setting']['memberperpage'], $page, ADMINSCRIPT."?action=members&operation=search&submit=yes".$urladd);
  68. $usergroups = array();
  69. foreach(C::t('common_usergroup')->range() as $group) {
  70. switch($group['type']) {
  71. case 'system': $group['grouptitle'] = '<b>'.$group['grouptitle'].'</b>'; break;
  72. case 'special': $group['grouptitle'] = '<i>'.$group['grouptitle'].'</i>'; break;
  73. }
  74. $usergroups[$group['groupid']] = $group;
  75. }
  76. $uids = searchmembers($search_condition, $_G['setting']['memberperpage'], $start_limit);
  77. if($uids) {
  78. $allmember = C::t('common_member')->fetch_all($uids);
  79. $allcount = C::t('common_member_count')->fetch_all($uids);
  80. foreach($allmember as $uid=>$member) {
  81. $member = array_merge($member, (array)$allcount[$uid]);
  82. $memberextcredits = array();
  83. if($_G['setting']['extcredits']) {
  84. foreach($_G['setting']['extcredits'] as $id => $credit) {
  85. $memberextcredits[] = $_G['setting']['extcredits'][$id]['title'].': '.$member['extcredits'.$id].' ';
  86. }
  87. }
  88. $lockshow = $member['status'] == '-1' ? '<em class="lightnum">['.cplang('lock').']</em>' : '';
  89. $freezeshow = $member['freeze'] ? '<em class="lightnum">['.cplang('freeze').']</em>' : '';
  90. $members .= showtablerow('', array('class="td25"', '', 'title="'.implode("\n", $memberextcredits).'"'), array(
  91. "<input type=\"checkbox\" name=\"uidarray[]\" value=\"$member[uid]\"".($member['adminid'] == 1 ? 'disabled' : '')." class=\"checkbox\">",
  92. ($_G['setting']['connect']['allow'] && $member['conisbind'] ? '<img class="vmiddle" src="static/image/common/connect_qq.gif" /> ' : '')."<a href=\"home.php?mod=space&uid=$member[uid]\" target=\"_blank\">$member[username]</a>",
  93. $member['credits'],
  94. $member['posts'],
  95. $usergroups[$member['adminid']]['grouptitle'],
  96. $usergroups[$member['groupid']]['grouptitle'].$lockshow.$freezeshow,
  97. "<a href=\"".ADMINSCRIPT."?action=members&operation=group&uid=$member[uid]\" class=\"act\">$lang[usergroup]</a><a href=\"".ADMINSCRIPT."?action=members&operation=access&uid=$member[uid]\" class=\"act\">$lang[members_access]</a>".
  98. ($_G['setting']['extcredits'] ? "<a href=\"".ADMINSCRIPT."?action=members&operation=credit&uid=$member[uid]\" class=\"act\">$lang[credits]</a>" : "<span disabled>$lang[edit]</span>").
  99. "<a href=\"".ADMINSCRIPT."?action=members&operation=medal&uid=$member[uid]\" class=\"act\">$lang[medals]</a>".
  100. "<a href=\"".ADMINSCRIPT."?action=members&operation=repeat&uid=$member[uid]\" class=\"act\">$lang[members_repeat]</a>".
  101. "<a href=\"".ADMINSCRIPT."?action=members&operation=edit&uid=$member[uid]\" class=\"act\">$lang[detail]</a>".
  102. "<a href=\"".ADMINSCRIPT."?action=members&operation=ban&uid=$member[uid]\" class=\"act\">$lang[members_ban]</a>"
  103. ), TRUE);
  104. }
  105. }
  106. }
  107. shownav('user', 'nav_members');
  108. showsubmenu('nav_members');
  109. showtips('members_export_tips');
  110. foreach($search_condition as $k => $v) {
  111. if($k == 'username') {
  112. $v = explode(',', $v);
  113. $tmpv = array();
  114. foreach($v as $subvalue) {
  115. $tmpv[] = rawurlencode($subvalue);
  116. }
  117. $v = implode(',', $tmpv);
  118. }
  119. if(is_array($v)) {
  120. foreach($v as $value ) {
  121. $condition_str .= '&'.$k.'[]='.$value;
  122. }
  123. } else {
  124. $condition_str .= '&'.$k.'='.$v;
  125. }
  126. }
  127. showformheader("members&operation=clean".$condition_str);
  128. showtableheader(cplang('members_search_result', array('membernum' => $membernum)).'<a href="'.ADMINSCRIPT.'?action=members&operation=search" class="act lightlink normal">'.cplang('research').'</a>&nbsp;&nbsp;&nbsp;<a href='.ADMINSCRIPT.'?action=members&operation=export'.$condition_str.'>'.$lang['members_search_export'].'</a>');
  129. if($membernum) {
  130. showsubtitle(array('', 'username', 'credits', 'posts', 'admingroup', 'usergroup', ''));
  131. echo $members;
  132. $condition_str = str_replace('&tablename=master', '', $condition_str);
  133. showsubmit('deletesubmit', cplang('delete'), ($tmpsearch_condition ? '<input type="checkbox" name="chkall" onclick="checkAll(\'prefix\', this.form, \'uidarray\');if(this.checked){$(\'deleteallinput\').style.display=\'\';}else{$(\'deleteall\').checked = false;$(\'deleteallinput\').style.display=\'none\';}" class="checkbox">'.cplang('select_all') : ''), ' &nbsp;&nbsp;&nbsp;<span id="deleteallinput" style="display:none"><input id="deleteall" type="checkbox" name="deleteall" class="checkbox">'.cplang('members_search_deleteall', array('membernum' => $membernum)).'</span>', $multipage);
  134. }
  135. showtablefooter();
  136. showformfooter();
  137. }
  138. } elseif($operation == 'export') {
  139. $uids = searchmembers($search_condition, 10000);
  140. $detail = '';
  141. if($uids && is_array($uids)) {
  142. $allprofile = C::t('common_member_profile')->fetch_all($uids);
  143. $allusername = C::t('common_member')->fetch_all_username_by_uid($uids);
  144. foreach($allprofile as $uid=>$profile) {
  145. unset($profile['uid']);
  146. $profile = array_merge(array('uid'=>$uid, 'username'=>$allusername[$uid]),$profile);
  147. foreach($profile as $key => $value) {
  148. $value = preg_replace('/\s+/', ' ', $value);
  149. if($key == 'gender') $value = lang('space', 'gender_'.$value);
  150. $detail .= strlen($value) > 11 && is_numeric($value) ? '['.$value.'],' : $value.',';
  151. }
  152. $detail = $detail."\n";
  153. }
  154. }
  155. $title = array('realname' => '', 'gender' => '', 'birthyear' => '', 'birthmonth' => '', 'birthday' => '', 'constellation' => '',
  156. 'zodiac' => '', 'telephone' => '', 'mobile' => '', 'idcardtype' => '', 'idcard' => '', 'address' => '', 'zipcode' => '','nationality' => '',
  157. 'birthprovince' => '', 'birthcity' => '', 'birthdist' => '', 'birthcommunity' => '', 'resideprovince' => '', 'residecity' => '', 'residedist' => '',
  158. 'residecommunity' => '', 'residesuite' => '', 'graduateschool' => '', 'education' => '', 'company' => '', 'occupation' => '',
  159. 'position' => '', 'revenue' => '', 'affectivestatus' => '', 'lookingfor' => '', 'bloodtype' => '', 'height' => '', 'weight' => '',
  160. 'alipay' => '', 'icq' => '', 'qq' => '', 'yahoo' => '', 'msn' => '', 'taobao' => '', 'site' => '', 'bio' => '', 'interest' => '',
  161. 'field1' => '', 'field2' => '', 'field3' => '', 'field4' => '', 'field5' => '', 'field6' => '', 'field7' => '', 'field8' => '');
  162. foreach(C::t('common_member_profile_setting')->range() as $value) {
  163. if(isset($title[$value['fieldid']])) {
  164. $title[$value['fieldid']] = $value['title'];
  165. }
  166. }
  167. foreach($title as $k => $v) {
  168. $subject .= ($v ? $v : $k).",";
  169. }
  170. $detail = "UID,".$lang['username'].",".$subject."\n".$detail;
  171. $filename = date('Ymd', TIMESTAMP).'.csv';
  172. ob_end_clean();
  173. header('Content-Encoding: none');
  174. header('Content-Type: application/octet-stream');
  175. header('Content-Disposition: attachment; filename='.$filename);
  176. header('Pragma: no-cache');
  177. header('Expires: 0');
  178. if($_G['charset'] != 'gbk') {
  179. $detail = diconv($detail, $_G['charset'], 'GBK');
  180. }
  181. echo $detail;
  182. exit();
  183. } elseif($operation == 'repeat') {
  184. if(empty($_GET['uid']) && empty($_GET['username']) && empty($_GET['ip'])) {
  185. shownav('user', 'nav_members');
  186. showsubmenu('nav_members', array(
  187. array('search', 'members&operation=search', 0),
  188. array('clean', 'members&operation=clean', 0),
  189. array('nav_repeat', 'members&operation=repeat', 1),
  190. ));
  191. showformheader("members&operation=repeat");
  192. showtableheader();
  193. showsetting('members_search_repeatuser', 'username', '', 'text');
  194. showsetting('members_search_uid', 'uid', '', 'text');
  195. showsetting('members_search_repeatip', 'ip', $_GET['inputip'], 'text');
  196. showsubmit('submit', 'submit');
  197. showtablefooter();
  198. showformfooter();
  199. } else {
  200. $ips = array();
  201. $urladd = '';
  202. if(!empty($_GET['username'])) {
  203. $uid = C::t('common_member')->fetch_uid_by_username($_GET['username']);
  204. $searchmember = $uid ? C::t('common_member_status')->fetch($uid) : '';
  205. $searchmember['username'] = $_GET['username'];
  206. $urladd .= '&username='.$_GET['username'];
  207. } elseif(!empty($_GET['uid'])) {
  208. $searchmember = C::t('common_member_status')->fetch($_GET['uid']);
  209. $themember = C::t('common_member')->fetch($_GET['uid']);
  210. $searchmember['username'] = $themember['username'];
  211. $urladd .= '&uid='.$_GET['uid'];
  212. unset($_GET['uid']);
  213. } elseif(!empty($_GET['ip'])) {
  214. $regip = $lastip = $_GET['ip'];
  215. $ips[] = $_GET['ip'];
  216. $search_condition['lastip'] = $_GET['ip'];
  217. $urladd .= '&ip='.$_GET['ip'];
  218. }
  219. if($searchmember) {
  220. $ips = array();
  221. foreach(array('regip', 'lastip') as $iptype) {
  222. if($searchmember[$iptype] != '' && $searchmember[$iptype] != 'hidden') {
  223. $ips[] = $searchmember[$iptype];
  224. }
  225. }
  226. $ips = !empty($ips) ? array_unique($ips) : array('unknown');
  227. }
  228. $searchmember['username'] .= ' (IP '.dhtmlspecialchars($ids).')';
  229. $membernum = !empty($ips) ? C::t('common_member_status')->count_by_ip($ips) : C::t('common_member_status')->count();
  230. $members = '';
  231. if($membernum) {
  232. $usergroups = array();
  233. foreach(C::t('common_usergroup')->range() as $group) {
  234. switch($group['type']) {
  235. case 'system': $group['grouptitle'] = '<b>'.$group['grouptitle'].'</b>'; break;
  236. case 'special': $group['grouptitle'] = '<i>'.$group['grouptitle'].'</i>'; break;
  237. }
  238. $usergroups[$group['groupid']] = $group;
  239. }
  240. $uids = searchmembers($search_condition, $_G['setting']['memberperpage'], $start_limit);
  241. $conditions = 'm.uid IN ('.dimplode($uids).')';
  242. $_G['setting']['memberperpage'] = 100;
  243. $start_limit = ($page - 1) * $_G['setting']['memberperpage'];
  244. $multipage = multi($membernum, $_G['setting']['memberperpage'], $page, ADMINSCRIPT."?action=members&operation=repeat&submit=yes".$urladd);
  245. $allstatus = !empty($ips) ? C::t('common_member_status')->fetch_all_by_ip($ips, $start_limit, $_G['setting']['memberperpage'])
  246. : C::t('common_member_status')->range($start_limit, $_G['setting']['memberperpage']);
  247. $allcount = C::t('common_member_count')->fetch_all(array_keys($allstatus));
  248. $allmember = C::t('common_member')->fetch_all(array_keys($allstatus));
  249. foreach($allstatus as $uid => $member) {
  250. $member = array_merge($member, (array)$allcount[$uid], (array)$allmember[$uid]);
  251. $memberextcredits = array();
  252. foreach($_G['setting']['extcredits'] as $id => $credit) {
  253. $memberextcredits[] = $_G['setting']['extcredits'][$id]['title'].': '.$member['extcredits'.$id];
  254. }
  255. $members .= showtablerow('', array('class="td25"', '', 'title="'.implode("\n", $memberextcredits).'"'), array(
  256. "<input type=\"checkbox\" name=\"uidarray[]\" value=\"$member[uid]\"".($member['adminid'] == 1 ? 'disabled' : '')." class=\"checkbox\">",
  257. "<a href=\"home.php?mod=space&uid=$member[uid]\" target=\"_blank\">$member[username]</a>",
  258. $member['credits'],
  259. $member['posts'],
  260. $usergroups[$member['adminid']]['grouptitle'],
  261. $usergroups[$member['groupid']]['grouptitle'],
  262. "<a href=\"".ADMINSCRIPT."?action=members&operation=group&uid=$member[uid]\" class=\"act\">$lang[usergroup]</a><a href=\"".ADMINSCRIPT."?action=members&operation=access&uid=$member[uid]\" class=\"act\">$lang[members_access]</a>".
  263. ($_G['setting']['extcredits'] ? "<a href=\"".ADMINSCRIPT."?action=members&operation=credit&uid=$member[uid]\" class=\"act\">$lang[credits]</a>" : "<span disabled>$lang[edit]</span>").
  264. "<a href=\"".ADMINSCRIPT."?action=members&operation=medal&uid=$member[uid]\" class=\"act\">$lang[medals]</a>".
  265. "<a href=\"".ADMINSCRIPT."?action=members&operation=repeat&uid=$member[uid]\" class=\"act\">$lang[members_repeat]</a>".
  266. "<a href=\"".ADMINSCRIPT."?action=members&operation=edit&uid=$member[uid]\" class=\"act\">$lang[detail]</a>"
  267. ), TRUE);
  268. }
  269. }
  270. shownav('user', 'nav_repeat');
  271. showsubmenu($lang['nav_repeat'].' - '.$searchmember['username']);
  272. showformheader("members&operation=clean");
  273. $searchadd = '';
  274. if(is_array($ips)) {
  275. foreach($ips as $ip) {
  276. $searchadd .= '<a href="'.ADMINSCRIPT.'?action=members&operation=repeat&inputip='.rawurlencode($ip).'" class="act lightlink normal">'.cplang('search').'IP '.dhtmlspecialchars($ip).'</a>';
  277. }
  278. }
  279. showtableheader(cplang('members_search_result', array('membernum' => $membernum)).'<a href="'.ADMINSCRIPT.'?action=members&operation=repeat" class="act lightlink normal">'.cplang('research').'</a>'.$searchadd);
  280. showsubtitle(array('', 'username', 'credits', 'posts', 'admingroup', 'usergroup', ''));
  281. echo $members;
  282. showtablerow('', array('class="td25"', 'class="lineheight" colspan="7"'), array('', cplang('members_admin_comment')));
  283. showsubmit('submit', 'submit', '<input type="checkbox" name="chkall" onclick="checkAll(\'prefix\', this.form, \'uidarray\')" class="checkbox">'.cplang('del'), '', $multipage);
  284. showtablefooter();
  285. showformfooter();
  286. }
  287. } elseif($operation == 'clean') {
  288. if(!submitcheck('submit', 1) && !submitcheck('deletesubmit', 1)) {
  289. shownav('user', 'nav_members');
  290. showsubmenu('nav_members', array(
  291. array('search', 'members&operation=search', 0),
  292. array('clean', 'members&operation=clean', 1),
  293. array('nav_repeat', 'members&operation=repeat', 0),
  294. ));
  295. showsearchform('clean');
  296. } else {
  297. if((!$tmpsearch_condition && empty($_GET['uidarray'])) || (submitcheck('deletesubmit', 1) && empty($_GET['uidarray']))) {
  298. cpmsg('members_no_find_deluser', '', 'error');
  299. }
  300. if(!empty($_GET['deleteall'])) {
  301. unset($search_condition['uidarray']);
  302. $_GET['uidarray'] = '';
  303. }
  304. $uids = 0;
  305. $extra = '';
  306. $delmemberlimit = 300;
  307. $deletestart = intval($_GET['deletestart']);
  308. if(!empty($_GET['uidarray'])) {
  309. $uids = array();
  310. $allmember = C::t('common_member')->fetch_all($_GET['uidarray']);
  311. $count = count($allmember);
  312. $membernum = 0;
  313. foreach($allmember as $uid => $member) {
  314. if($member['adminid'] !== 1 && $member['groupid'] !== 1) {
  315. if($count < 2000 || !empty($_GET['uidarray'])) {
  316. $extra .= '<input type="hidden" name="uidarray[]" value="'.$member['uid'].'" />';
  317. }
  318. $uids[] = $member['uid'];
  319. $membernum ++;
  320. }
  321. }
  322. } elseif($tmpsearch_condition) {
  323. $membernum = countmembers($search_condition, $urladd);
  324. $uids = searchmembers($search_condition, $delmemberlimit, 0);
  325. }
  326. $allnum = intval($_GET['allnum']);
  327. $conditions = $uids ? 'm.uid IN ('.dimplode($uids).')' : '0';
  328. if((empty($membernum) || empty($uids))) {
  329. if($deletestart) {
  330. cpmsg('members_delete_succeed', '', 'succeed', array('numdeleted' => $allnum));
  331. }
  332. cpmsg('members_no_find_deluser', '', 'error');
  333. }
  334. if(!submitcheck('confirmed')) {
  335. cpmsg('members_delete_confirm', "action=members&operation=clean&submit=yes&confirmed=yes".$urladd, 'form', array('membernum' => $membernum), $extra.'<br /><label><input type="checkbox" name="includepost" value="1" class="checkbox" />'.$lang['members_delete_all'].'</label>'.($isfounder ? '&nbsp;<label><input type="checkbox" name="includeuc" value="1" class="checkbox" />'.$lang['members_delete_ucdata'].'</label>' : ''), '');
  336. } else {
  337. if(!submitcheck('includepost')) {
  338. require_once libfile('function/delete');
  339. $numdeleted = deletemember($uids, 0);
  340. if($isfounder && !empty($_GET['includeuc'])) {
  341. loaducenter();
  342. uc_user_delete($uids);
  343. $_GET['includeuc'] = 1;
  344. } else {
  345. $_GET['includeuc'] = 0;
  346. }
  347. if($_GET['uidarray']) {
  348. cpmsg('members_delete_succeed', '', 'succeed', array('numdeleted' => $numdeleted));
  349. } else {
  350. $allnum += $membernum < $delmemberlimit ? $membernum : $delmemberlimit;
  351. $nextlink = "action=members&operation=clean&confirmed=yes&submit=yes".(!empty($_GET['includeuc']) ? '&includeuc=yes' : '')."&allnum=$allnum&deletestart=".($deletestart+$delmemberlimit).$urladd;
  352. cpmsg(cplang('members_delete_user_processing_next', array('deletestart' => $deletestart, 'nextdeletestart' => $deletestart+$delmemberlimit)), $nextlink, 'loadingform', array());
  353. }
  354. } else {
  355. if(empty($uids)) {
  356. cpmsg('members_no_find_deluser', '', 'error');
  357. }
  358. $numdeleted = $numdeleted ? $numdeleted : count($uids);
  359. $pertask = 1000;
  360. $current = $_GET['current'] ? intval($_GET['current']) : 0;
  361. $deleteitem = $_GET['deleteitem'] ? trim($_GET['deleteitem']) : 'post';
  362. $nextdeleteitem = $deleteitem;
  363. $next = $current + $pertask;
  364. if($deleteitem == 'post') {
  365. $threads = $fids = $threadsarray = array();
  366. foreach(C::t('forum_thread')->fetch_all_by_authorid($uids, $pertask) as $thread) {
  367. $threads[$thread['fid']][] = $thread['tid'];
  368. }
  369. if($threads) {
  370. require_once libfile('function/post');
  371. foreach($threads as $fid => $tids) {
  372. deletethread($tids);
  373. }
  374. if($_G['setting']['globalstick']) {
  375. require_once libfile('function/cache');
  376. updatecache('globalstick');
  377. }
  378. } else {
  379. $next = 0;
  380. $nextdeleteitem = 'blog';
  381. }
  382. }
  383. if($deleteitem == 'blog') {
  384. $blogs = array();
  385. $query = C::t('home_blog')->fetch_blogid_by_uid($uids, 0, $pertask);
  386. foreach($query as $blog) {
  387. $blogs[] = $blog['blogid'];
  388. }
  389. if($blogs) {
  390. deleteblogs($blogs);
  391. } else {
  392. $next = 0;
  393. $nextdeleteitem = 'pic';
  394. }
  395. }
  396. if($deleteitem == 'pic') {
  397. $pics = array();
  398. $query = C::t('home_pic')->fetch_all_by_uid($uids, 0, $pertask);
  399. foreach($query as $pic) {
  400. $pics[] = $pic['picid'];
  401. }
  402. if($pics) {
  403. deletepics($pics);
  404. } else {
  405. $next = 0;
  406. $nextdeleteitem = 'doing';
  407. }
  408. }
  409. if($deleteitem == 'doing') {
  410. $doings = array();
  411. $query = C::t('home_doing')->fetch_all_by_uid_doid($uids, '', '', 0, $pertask);
  412. foreach ($query as $doings) {
  413. $doings[] = $doing['doid'];
  414. }
  415. if($doings) {
  416. deletedoings($doings);
  417. } else {
  418. $next = 0;
  419. $nextdeleteitem = 'share';
  420. }
  421. }
  422. if($deleteitem == 'share') {
  423. $shares = array();
  424. foreach(C::t('home_share')->fetch_all_by_uid($uids, $pertask) as $share) {
  425. $shares[] = $share['sid'];
  426. }
  427. if($shares) {
  428. deleteshares($shares);
  429. } else {
  430. $next = 0;
  431. $nextdeleteitem = 'feed';
  432. }
  433. }
  434. if($deleteitem == 'feed') {
  435. C::t('home_follow_feed')->delete_by_uid($uids);
  436. $nextdeleteitem = 'comment';
  437. }
  438. if($deleteitem == 'comment') {
  439. $comments = array();
  440. $query = C::t('home_comment')->fetch_all_by_uid($uids, 0, $pertask);
  441. foreach($query as $comment) {
  442. $comments[] = $comment['cid'];
  443. }
  444. if($comments) {
  445. deletecomments($comments);
  446. } else {
  447. $next = 0;
  448. $nextdeleteitem = 'allitem';
  449. }
  450. }
  451. if($deleteitem == 'allitem') {
  452. require_once libfile('function/delete');
  453. $numdeleted = deletemember($uids);
  454. if($isfounder && !empty($_GET['includeuc'])) {
  455. loaducenter();
  456. uc_user_delete($uids);
  457. }
  458. if(!empty($_GET['uidarray'])) {
  459. cpmsg('members_delete_succeed', '', 'succeed', array('numdeleted' => $numdeleted));
  460. } else {
  461. $allnum += $membernum < $delmemberlimit ? $membernum : $delmemberlimit;
  462. $nextlink = "action=members&operation=clean&confirmed=yes&submit=yes&includepost=yes".(!empty($_GET['includeuc']) ? '&includeuc=yes' : '')."&allnum=$allnum&deletestart=".($deletestart+$delmemberlimit).$urladd;
  463. cpmsg(cplang('members_delete_user_processing_next', array('deletestart' => $deletestart, 'nextdeletestart' => $deletestart+$delmemberlimit)), $nextlink, 'loadingform', array());
  464. }
  465. }
  466. $nextlink = "action=members&operation=clean&confirmed=yes&submit=yes&includepost=yes".(!empty($_GET['includeuc']) ? '&includeuc=yes' : '')."&current=$next&pertask=$pertask&lastprocess=$processed&allnum=$allnum&deletestart=$deletestart".$urladd;
  467. if(empty($_GET['uidarray'])) {
  468. $deladdmsg = cplang('members_delete_user_processing', array('deletestart' => $deletestart, 'nextdeletestart' => $deletestart+$delmemberlimit)).'<br>';
  469. } else {
  470. $deladdmsg = '';
  471. }
  472. if($nextdeleteitem != $deleteitem) {
  473. $nextlink .= "&deleteitem=$nextdeleteitem";
  474. cpmsg(cplang('members_delete_processing_next', array('deladdmsg' => $deladdmsg, 'item' => cplang('members_delete_'.$deleteitem), 'nextitem' => cplang('members_delete_'.$nextdeleteitem))), $nextlink, 'loadingform', array(), $extra);
  475. } else {
  476. $nextlink .= "&deleteitem=$deleteitem";
  477. cpmsg(cplang('members_delete_processing', array('deladdmsg' => $deladdmsg, 'item' => cplang('members_delete_'.$deleteitem), 'current' => $current, 'next' => $next)), $nextlink, 'loadingform', array(), $extra);
  478. }
  479. }
  480. }
  481. }
  482. } elseif($operation == 'newsletter') {
  483. if(!submitcheck('newslettersubmit')) {
  484. loadcache('newsletter_detail');
  485. $newletter_detail = get_newsletter('newsletter_detail');
  486. $newletter_detail = dunserialize($newletter_detail);
  487. if($newletter_detail && $newletter_detail['uid'] == $_G['uid']) {
  488. if($_GET['goon'] == 'yes') {
  489. cpmsg("$lang[members_newsletter_send]: ".cplang('members_newsletter_processing', array('current' => $newletter_detail['current'], 'next' => $newletter_detail['next'], 'search_condition' => $newletter_detail['search_condition'])), $newletter_detail['action'], 'loadingform');
  490. } elseif($_GET['goon'] == 'no') {
  491. del_newsletter('newsletter_detail');
  492. } else {
  493. cpmsg('members_edit_continue', '', '', '', '<input type="button" class="btn" value="'.$lang[ok].'" onclick="location.href=\''.ADMINSCRIPT.'?action=members&operation=newsletter&goon=yes\'">&nbsp;&nbsp;<input type="button" class="btn" value="'.$lang[cancel].'" onclick="location.href=\''.ADMINSCRIPT.'?action=members&operation=newsletter&goon=no\';">');
  494. exit;
  495. }
  496. }
  497. if($_GET['do'] == 'mobile') {
  498. shownav('user', 'nav_members_newsletter_mobile');
  499. showsubmenusteps('nav_members_newsletter_mobile', array(
  500. array('nav_members_select', !$_GET['submit']),
  501. array('nav_members_notify', $_GET['submit']),
  502. ));
  503. showtips('members_newsletter_mobile_tips');
  504. } else {
  505. shownav('user', 'nav_members_newsletter');
  506. showsubmenusteps('nav_members_newsletter', array(
  507. array('nav_members_select', !$_GET['submit']),
  508. array('nav_members_notify', $_GET['submit']),
  509. ), array(), array(array('members_grouppmlist', 'members&operation=grouppmlist', 0)));
  510. }
  511. showsearchform('newsletter');
  512. if(submitcheck('submit')) {
  513. $dostr = '';
  514. if($_GET['do'] == 'mobile') {
  515. $search_condition['token_noempty'] = 'token';
  516. $dostr = '&do=mobile';
  517. }
  518. $membernum = countmembers($search_condition, $urladd);
  519. showtagheader('div', 'newsletter', TRUE);
  520. showformheader('members&operation=newsletter'.$urladd.$dostr);
  521. showhiddenfields(array('notifymember' => 1));
  522. echo '<table class="tb tb1">';
  523. if(!$membernum) {
  524. showtablerow('', 'class="lineheight"', $lang['members_search_nonexistence']);
  525. } else {
  526. showtablerow('class="first"', array('class="th11"'), array(
  527. cplang('members_newsletter_members'),
  528. cplang('members_search_result', array('membernum' => $membernum))."<a href=\"###\" onclick=\"$('searchmembers').style.display='';$('newsletter').style.display='none';$('step1').className='current';$('step2').className='';\" class=\"act\">$lang[research]</a>"
  529. ));
  530. showtablefooter();
  531. shownewsletter();
  532. $search_condition = serialize($search_condition);
  533. showsubmit('newslettersubmit', 'submit', 'td', '<input type="hidden" name="conditions" value=\''.$search_condition.'\' />');
  534. }
  535. showtablefooter();
  536. showformfooter();
  537. showtagfooter('div');
  538. }
  539. } else {
  540. $search_condition = dunserialize($_POST['conditions']);
  541. $membernum = countmembers($search_condition, $urladd);
  542. notifymembers('newsletter', 'newsletter');
  543. }
  544. } elseif($operation == 'grouppmlist') {
  545. if(!empty($_GET['delete']) && ($isfounder || C::t('common_grouppm')->count_by_id_authorid($_GET['delete'], $_G['uid']))) {
  546. if(!empty($_GET['confirm'])) {
  547. C::t('common_grouppm')->delete($_GET['delete']);
  548. C::t('common_member_grouppm')->delete_by_gpmid($_GET['delete']);
  549. } else {
  550. cpmsg('members_grouppm_delete_confirm', 'action=members&operation=grouppmlist&delete='.intval($_GET['delete']).'&confirm=yes', 'form');
  551. }
  552. }
  553. shownav('user', 'nav_members_newsletter');
  554. showsubmenu('nav_members_newsletter', array(
  555. array('members_grouppmlist_newsletter', 'members&operation=newsletter', 0),
  556. array('members_grouppmlist', 'members&operation=grouppmlist', 1)
  557. ));
  558. if($do) {
  559. $unreads = C::t('common_member_grouppm')->count_by_gpmid($do, 0);
  560. }
  561. showtableheader();
  562. $id = empty($do) ? 0 : $do;
  563. $authorid = $isfounder ? 0 : $_G['uid'];
  564. $grouppms = C::t('common_grouppm')->fetch_all_by_id_authorid($id, $authorid);
  565. if(!empty($grouppms)) {
  566. $users = C::t('common_member')->fetch_all(C::t('common_grouppm')->get_uids());
  567. foreach($grouppms as $grouppm) {
  568. showtablerow('', array('valign="top" class="td25"', 'valign="top"'), array(
  569. '<a href="home.php?mod=space&uid='.$grouppm['authorid'].'" target="_blank">'.avatar($grouppm['authorid'], 'small').'</a>',
  570. '<a href="home.php?mod=space&uid='.$grouppm['authorid'].'" target="_blank"><b>'.$users[$grouppm['authorid']]['username'].'</b></a> ('.dgmdate($grouppm['dateline']).'):<br />'.
  571. $grouppm['message'].'<br /><br />'.
  572. (!$do ?
  573. '<a href="'.ADMINSCRIPT.'?action=members&operation=grouppmlist&do='.$grouppm['id'].'">'.cplang('members_grouppmlist_view', array('number' => $grouppm['numbers'])).'</a>' :
  574. '<a href="'.ADMINSCRIPT.'?action=members&operation=grouppmlist&do='.$grouppm['id'].'">'.cplang('members_grouppmlist_view_all').'</a>('.$grouppm['numbers'].') &nbsp; '.
  575. '<a href="'.ADMINSCRIPT.'?action=members&operation=grouppmlist&do='.$grouppm['id'].'&filter=unread">'.cplang('members_grouppmlist_view_unread').'</a>('.$unreads.') &nbsp; '.
  576. '<a href="'.ADMINSCRIPT.'?action=members&operation=grouppmlist&do='.$grouppm['id'].'&filter=read">'.cplang('members_grouppmlist_view_read').'</a>('.($grouppm['numbers'] - $unreads).')'),
  577. '<a href="'.ADMINSCRIPT.'?action=members&operation=grouppmlist&delete='.$grouppm['id'].'">'.cplang('delete').'</a>'
  578. ));
  579. }
  580. } else {
  581. showtablerow('', '', cplang('members_newsletter_empty'));
  582. }
  583. showtablefooter();
  584. if($do) {
  585. $_GET['filter'] = in_array($_GET['filter'], array('read', 'unread')) ? $_GET['filter'] : '';
  586. $filteradd = $_GET['filter'] ? '&filter='.$_GET['filter'] : '';
  587. $ppp = 100;
  588. $start_limit = ($page - 1) * $ppp;
  589. if($_GET['filter'] != 'unread') {
  590. $count = C::t('common_member_grouppm')->count_by_gpmid($do, 1);
  591. } else {
  592. $count = $unreads;
  593. }
  594. $multipage = multi($count, $ppp, $page, ADMINSCRIPT."?action=members&operation=grouppmlist&do=$do".$filteradd);
  595. $alldata = C::t('common_member_grouppm')->fetch_all_by_gpmid($gpmid, $_GET['filter'] == 'read' ? 1 : 0, $start_limit, $ppp);
  596. $allmember = $gpmuser ? C::t('common_member')->fetch_all_username_by_uid(array_keys($gpmuser)) : array();
  597. foreach($alldata as $uid => $gpmuser) {
  598. echo '<div style="margin-bottom:5px;float:left;width:24%"><b><a href="home.php?mod=space&uid='.$uid.'" target="_blank">'.$allmember[$uid].'</a></b><br />&nbsp;';
  599. if($gpmuser['status'] == 0) {
  600. echo '<span class="lightfont">'.cplang('members_grouppmlist_status_0').'</span>';
  601. } else {
  602. echo dgmdate($gpmuser['dateline'], 'u').' '.cplang('members_grouppmlist_status_1');
  603. if($gpmuser['status'] == -1) {
  604. echo ', <span class="error">'.cplang('members_grouppmlist_status_-1').'</span>';
  605. }
  606. }
  607. echo '</div>';
  608. }
  609. echo $multipage;
  610. }
  611. } elseif($operation == 'reward') {
  612. if(!submitcheck('rewardsubmit')) {
  613. shownav('user', 'nav_members_reward');
  614. showsubmenusteps('nav_members_reward', array(
  615. array('nav_members_select', !$_GET['submit']),
  616. array('nav_members_reward', $_GET['submit']),
  617. ));
  618. showsearchform('reward');
  619. if(submitcheck('submit', 1)) {
  620. $membernum = countmembers($search_condition, $urladd);
  621. showtagheader('div', 'reward', TRUE);
  622. showformheader('members&operation=reward'.$urladd);
  623. echo '<table class="tb tb1">';
  624. if(!$membernum) {
  625. showtablerow('', 'class="lineheight"', $lang['members_search_nonexistence']);
  626. showtablefooter();
  627. } else {
  628. $creditscols = array('credits_title');
  629. $creditsvalue = $resetcredits = array();
  630. $js_extcreditids = '';
  631. for($i=1; $i<=8; $i++) {
  632. $js_extcreditids .= (isset($_G['setting']['extcredits'][$i]) ? ($js_extcreditids ? ',' : '').$i : '');
  633. $creditscols[] = isset($_G['setting']['extcredits'][$i]) ? $_G['setting']['extcredits'][$i]['title'] : 'extcredits'.$i;
  634. $creditsvalue[] = isset($_G['setting']['extcredits'][$i]) ? '<input type="text" class="txt" size="3" id="addextcredits['.$i.']" name="addextcredits['.$i.']" value="0"> '.$_G['setting']['extcredits']['$i']['unit'] : '<input type="text" class="txt" size="3" value="N/A" disabled>';
  635. $resetcredits[] = isset($_G['setting']['extcredits'][$i]) ? '<input type="checkbox" id="resetextcredits['.$i.']" name="resetextcredits['.$i.']" value="1" class="radio" disabled> '.$_G['setting']['extcredits']['$i']['unit'] : '<input type="checkbox" disabled class="radio">';
  636. }
  637. $creditsvalue = array_merge(array('<input type="radio" name="updatecredittype" id="updatecredittype0" value="0" class="radio" onclick="var extcredits = new Array('.$js_extcreditids.'); for(k in extcredits) {$(\'resetextcredits[\'+extcredits[k]+\']\').disabled = true; $(\'addextcredits[\'+extcredits[k]+\']\').disabled = false;}" checked="checked" /><label for="updatecredittype0">'.$lang['members_reward_value'].'</label>'), $creditsvalue);
  638. $resetcredits = array_merge(array('<input type="radio" name="updatecredittype" id="updatecredittype1" value="1" class="radio" onclick="var extcredits = new Array('.$js_extcreditids.'); for(k in extcredits) {$(\'addextcredits[\'+extcredits[k]+\']\').disabled = true; $(\'resetextcredits[\'+extcredits[k]+\']\').disabled = false;}" /><label for="updatecredittype1">'.$lang['members_reward_clean'].'</label>'), $resetcredits);
  639. showtablerow('class="first"', array('class="th11"'), array(
  640. cplang('members_reward_members'),
  641. cplang('members_search_result', array('membernum' => $membernum))."<a href=\"###\" onclick=\"$('searchmembers').style.display='';$('reward').style.display='none';$('step1').className='current';$('step2').className='';\" class=\"act\">$lang[research]</a>"
  642. ));
  643. echo '<tr><td class="th12">'.cplang('nav_members_reward').'</td><td>';
  644. showtableheader('', 'noborder');
  645. showsubtitle($creditscols);
  646. showtablerow('', array('class="td23"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"'), $creditsvalue);
  647. showtablerow('', array('class="td23"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"'), $resetcredits);
  648. showtablefooter();
  649. showtablefooter();
  650. showtagheader('div', 'messagebody');
  651. shownewsletter();
  652. showtagfooter('div');
  653. showsubmit('rewardsubmit', 'submit', 'td', '<input class="checkbox" type="checkbox" name="notifymember" value="1" onclick="$(\'messagebody\').style.display = this.checked ? \'\' : \'none\'" id="credits_notify" /><label for="credits_notify">'.cplang('members_reward_notify').'</label>');
  654. }
  655. showtablefooter();
  656. showformfooter();
  657. showtagfooter('div');
  658. }
  659. } else {
  660. if(!empty($_POST['conditions'])) $search_condition = dunserialize($_POST['conditions']);
  661. $membernum = countmembers($search_condition, $urladd);
  662. notifymembers('reward', 'creditsnotify');
  663. }
  664. } elseif($operation == 'confermedal') {
  665. $medals = '';
  666. foreach(C::t('forum_medal')->fetch_all_data(1) as $medal) {
  667. $medals .= showtablerow('', array('class="td25"', 'class="td23"'), array(
  668. "<input class=\"checkbox\" type=\"checkbox\" name=\"medals[$medal[medalid]]\" value=\"1\" />",
  669. "<img src=\"static/image/common/$medal[image]\" />",
  670. $medal['name']
  671. ), TRUE);
  672. }
  673. if(!$medals) {
  674. cpmsg('members_edit_medals_nonexistence', 'action=medals', 'error');
  675. }
  676. if(!submitcheck('confermedalsubmit')) {
  677. shownav('extended', 'nav_medals', 'nav_members_confermedal');
  678. showsubmenusteps('nav_members_confermedal', array(
  679. array('nav_members_select', !$_GET['submit']),
  680. array('nav_members_confermedal', $_GET['submit']),
  681. ), array(
  682. array('admin', 'medals', 0),
  683. array('nav_medals_confer', 'members&operation=confermedal', 1),
  684. array('nav_medals_mod', 'medals&operation=mod', 0)
  685. ));
  686. showsearchform('confermedal');
  687. if(submitcheck('submit', 1)) {
  688. $membernum = countmembers($search_condition, $urladd);
  689. showtagheader('div', 'confermedal', TRUE);
  690. showformheader('members&operation=confermedal'.$urladd);
  691. echo '<table class="tb tb1">';
  692. if(!$membernum) {
  693. showtablerow('', 'class="lineheight"', $lang['members_search_nonexistence']);
  694. showtablefooter();
  695. } else {
  696. showtablerow('class="first"', array('class="th11"'), array(
  697. cplang('members_confermedal_members'),
  698. cplang('members_search_result', array('membernum' => $membernum))."<a href=\"###\" onclick=\"$('searchmembers').style.display='';$('confermedal').style.display='none';$('step1').className='current';$('step2').className='';\" class=\"act\">$lang[research]</a>"
  699. ));
  700. echo '<tr><td class="th12">'.cplang('members_confermedal').'</td><td>';
  701. showtableheader('', 'noborder');
  702. showsubtitle(array('medals_grant', 'medals_image', 'name'));
  703. echo $medals;
  704. showtablefooter();
  705. showtablefooter();
  706. showtagheader('div', 'messagebody');
  707. shownewsletter();
  708. showtagfooter('div');
  709. showsubmit('confermedalsubmit', 'submit', 'td', '<input class="checkbox" type="checkbox" name="notifymember" value="1" onclick="$(\'messagebody\').style.display = this.checked ? \'\' : \'none\'" id="grant_notify"/><label for="grant_notify">'.cplang('medals_grant_notify').'</label>');
  710. }
  711. showtablefooter();
  712. showformfooter();
  713. showtagfooter('div');
  714. }
  715. } else {
  716. if(!empty($_POST['conditions'])) $search_condition = dunserialize($_POST['conditions']);
  717. $membernum = countmembers($search_condition, $urladd);
  718. notifymembers('confermedal', 'medalletter');
  719. }
  720. } elseif($operation == 'confermagic') {
  721. $magics = '';
  722. foreach(C::t('common_magic')->fetch_all_data(1) as $magic) {
  723. $magics .= showtablerow('', array('class="td25"', 'class="td23"', 'class="td25"', ''), array(
  724. "<input class=\"checkbox\" type=\"checkbox\" name=\"magic[]\" value=\"$magic[magicid]\" />",
  725. "<img src=\"static/image/magic/$magic[identifier].gif\" />",
  726. $magic['name'],
  727. '<input class="txt" type="text" name="magicnum['.$magic['magicid'].']" value="1" size="3">'
  728. ), TRUE);
  729. }
  730. if(!$magics) {
  731. cpmsg('members_edit_magics_nonexistence', 'action=magics', 'error');
  732. }
  733. if(!submitcheck('confermagicsubmit')) {
  734. shownav('extended', 'nav_magics', 'nav_members_confermagic');
  735. showsubmenusteps('nav_members_confermagic', array(
  736. array('nav_members_select', !$_GET['submit']),
  737. array('nav_members_confermagic', $_GET['submit']),
  738. ), array(
  739. array('admin', 'magics&operation=admin', 0),
  740. array('nav_magics_confer', 'members&operation=confermagic', 1)
  741. ));
  742. showsearchform('confermagic');
  743. if(submitcheck('submit', 1)) {
  744. $membernum = countmembers($search_condition, $urladd);
  745. showtagheader('div', 'confermedal', TRUE);
  746. showformheader('members&operation=confermagic'.$urladd);
  747. echo '<table class="tb tb1">';
  748. if(!$membernum) {
  749. showtablerow('', 'class="lineheight"', $lang['members_search_nonexistence']);
  750. showtablefooter();
  751. } else {
  752. showtablerow('class="first"', array('class="th11"'), array(
  753. cplang('members_confermagic_members'),
  754. cplang('members_search_result', array('membernum' => $membernum))."<a href=\"###\" onclick=\"$('searchmembers').style.display='';$('confermedal').style.display='none';$('step1').className='current';$('step2').className='';\" class=\"act\">$lang[research]</a>"
  755. ));
  756. echo '<tr><td class="th12">'.cplang('members_confermagic').'</td><td>';
  757. showtableheader('', 'noborder');
  758. showsubtitle(array('nav_magics_confer', 'nav_magics_image', 'nav_magics_name', 'nav_magics_num'));
  759. echo $magics;
  760. showtablefooter();
  761. showtablefooter();
  762. showtagheader('div', 'messagebody');
  763. shownewsletter();
  764. showtagfooter('div');
  765. showsubmit('confermagicsubmit', 'submit', 'td', '<input class="checkbox" type="checkbox" name="notifymember" value="1" onclick="$(\'messagebody\').style.display = this.checked ? \'\' : \'none\'" id="grant_notify"/><label for="grant_notify">'.cplang('magics_grant_notify').'</label>');
  766. }
  767. showtablefooter();
  768. showformfooter();
  769. showtagfooter('div');
  770. }
  771. } else {
  772. if(!empty($_POST['conditions'])) $search_condition = dunserialize($_POST['conditions']);
  773. $membernum = countmembers($search_condition, $urladd);
  774. notifymembers('confermagic', 'magicletter');
  775. }
  776. } elseif($operation == 'add') {
  777. if(!submitcheck('addsubmit')) {
  778. $groupselect = array();
  779. $query = C::t('common_usergroup')->fetch_all_by_not_groupid(array(5, 6, 7));
  780. foreach($query as $group) {
  781. $group['type'] = $group['type'] == 'special' && $group['radminid'] ? 'specialadmin' : $group['type'];
  782. if($group['type'] == 'member' && $group['creditshigher'] == 0) {
  783. $groupselect[$group['type']] .= "<option value=\"$group[groupid]\" selected>$group[grouptitle]</option>\n";
  784. } else {
  785. $groupselect[$group['type']] .= "<option value=\"$group[groupid]\">$group[grouptitle]</option>\n";
  786. }
  787. }
  788. $groupselect = '<optgroup label="'.$lang['usergroups_member'].'">'.$groupselect['member'].'</optgroup>'.
  789. ($groupselect['special'] ? '<optgroup label="'.$lang['usergroups_special'].'">'.$groupselect['special'].'</optgroup>' : '').
  790. ($groupselect['specialadmin'] ? '<optgroup label="'.$lang['usergroups_specialadmin'].'">'.$groupselect['specialadmin'].'</optgroup>' : '').
  791. '<optgroup label="'.$lang['usergroups_system'].'">'.$groupselect['system'].'</optgroup>';
  792. shownav('user', 'nav_members_add');
  793. showsubmenu('members_add');
  794. showformheader('members&operation=add');
  795. showtableheader();
  796. showsetting('username', 'newusername', '', 'text');
  797. showsetting('password', 'newpassword', '', 'text');
  798. showsetting('email', 'newemail', '', 'text');
  799. showsetting('usergroup', '', '', '<select name="newgroupid">'.$groupselect.'</select>');
  800. showsetting('members_add_email_notify', 'emailnotify', '', 'radio');
  801. showsubmit('addsubmit');
  802. showtablefooter();
  803. showformfooter();
  804. } else {
  805. $newusername = trim($_GET['newusername']);
  806. $newpassword = trim($_GET['newpassword']);
  807. $newemail = strtolower(trim($_GET['newemail']));
  808. if(!$newusername || !isset($_GET['confirmed']) && !$newpassword || !isset($_GET['confirmed']) && !$newemail) {
  809. cpmsg('members_add_invalid', '', 'error');
  810. }
  811. if(C::t('common_member')->fetch_uid_by_username($newusername) || C::t('common_member_archive')->fetch_uid_by_username($newusername)) {
  812. cpmsg('members_add_username_duplicate', '', 'error');
  813. }
  814. loaducenter();
  815. $uid = uc_user_register(addslashes($newusername), $newpassword, $newemail);
  816. if($uid <= 0) {
  817. if($uid == -1) {
  818. cpmsg('members_add_illegal', '', 'error');
  819. } elseif($uid == -2) {
  820. cpmsg('members_username_protect', '', 'error');
  821. } elseif($uid == -3) {
  822. if(empty($_GET['confirmed'])) {
  823. cpmsg('members_add_username_activation', 'action=members&operation=add&addsubmit=yes&newgroupid='.$_GET['newgroupid'].'&newusername='.rawurlencode($newusername), 'form');
  824. } else {
  825. list($uid,, $newemail) = uc_get_user(addslashes($newusername));
  826. }
  827. } elseif($uid == -4) {
  828. cpmsg('members_email_illegal', '', 'error');
  829. } elseif($uid == -5) {
  830. cpmsg('members_email_domain_illegal', '', 'error');
  831. } elseif($uid == -6) {
  832. cpmsg('members_email_duplicate', '', 'error');
  833. }
  834. }
  835. $group = C::t('common_usergroup')->fetch($_GET['newgroupid']);
  836. $newadminid = in_array($group['radminid'], array(1, 2, 3)) ? $group['radminid'] : ($group['type'] == 'special' ? -1 : 0);
  837. if($group['radminid'] == 1) {
  838. cpmsg('members_add_admin_none', '', 'error');
  839. }
  840. if(in_array($group['groupid'], array(5, 6, 7))) {
  841. cpmsg('members_add_ban_all_none', '', 'error');
  842. }
  843. $profile = $verifyarr = array();
  844. loadcache('fields_register');
  845. $init_arr = explode(',', $_G['setting']['initcredits']);
  846. $password = md5(random(10));
  847. C::t('common_member')->insert($uid, $newusername, $password, $newemail, 'Manual Acting', $_GET['newgroupid'], $init_arr, $newadminid);
  848. if($_GET['emailnotify']) {
  849. if(!function_exists('sendmail')) {
  850. include libfile('function/mail');
  851. }
  852. $add_member_subject = lang('email', 'add_member_subject');
  853. $add_member_message = lang('email', 'add_member_message', array(
  854. 'newusername' => $newusername,
  855. 'bbname' => $_G['setting']['bbname'],
  856. 'adminusername' => $_G['member']['username'],
  857. 'siteurl' => $_G['siteurl'],
  858. 'newpassword' => $newpassword,
  859. ));
  860. if(!sendmail("$newusername <$newemail>", $add_member_subject, $add_member_message)) {
  861. runlog('sendmail', "$newemail sendmail failed.");
  862. }
  863. }
  864. updatecache('setting');
  865. cpmsg('members_add_succeed', '', 'succeed', array('username' => $newusername, 'uid' => $uid));
  866. }
  867. } elseif($operation == 'group') {
  868. $membermf = C::t('common_member_field_forum'.$tableext)->fetch($_GET['uid']);
  869. $membergroup = C::t('common_usergroup')->fetch($member['groupid']);
  870. $member = array_merge($member, (array)$membermf, $membergroup);
  871. if(!submitcheck('editsubmit')) {
  872. $checkadminid = array(($member['adminid'] >= 0 ? $member['adminid'] : 0) => 'checked');
  873. $member['groupterms'] = dunserialize($member['groupterms']);
  874. if($member['groupterms']['main']) {
  875. $expirydate = dgmdate($member['groupterms']['main']['time'], 'Y-n-j');
  876. $expirydays = ceil(($member['groupterms']['main']['time'] - TIMESTAMP) / 86400);
  877. $selecteaid = array($member['groupterms']['main']['adminid'] => 'selected');
  878. $selectegid = array($member['groupterms']['main']['groupid'] => 'selected');
  879. } else {
  880. $expirydate = $expirydays = '';
  881. $selecteaid = array($member['adminid'] => 'selected');
  882. $selectegid = array(($member['type'] == 'member' ? 0 : $member['groupid']) => 'selected');
  883. }
  884. $extgroups = $expgroups = '';
  885. $radmingids = 0;
  886. $extgrouparray = explode("\t", $member['extgroupids']);
  887. $groups = array('system' => '', 'special' => '', 'member' => '');
  888. $group = array('groupid' => 0, 'radminid' => 0, 'type' => '', 'grouptitle' => $lang['usergroups_system_0'], 'creditshigher' => 0, 'creditslower' => '0');
  889. $query = array_merge(array($group), (array)C::t('common_usergroup')->fetch_all_not(array(6, 7)));
  890. foreach($query as $group) {
  891. if($group['groupid'] && !in_array($group['groupid'], array(4, 5, 6, 7, 8)) && ($group['type'] == 'system' || $group['type'] == 'special')) {
  892. $extgroups .= showtablerow('', array('class="td27"', 'style="width:70%"'), array(
  893. '<input class="checkbox" type="checkbox" name="extgroupidsnew[]" value="'.$group['groupid'].'" '.(in_array($group['groupid'], $extgrouparray) ? 'checked' : '').' id="extgid_'.$group['groupid'].'" /><label for="extgid_'.$group['groupid'].'"> '.$group['grouptitle'].'</label>',
  894. '<input type="text" class="txt" size="9" name="extgroupexpirynew['.$group['groupid'].']" value="'.(in_array($group['groupid'], $extgrouparray) && !empty($member['groupterms']['ext'][$group['groupid']]) ? dgmdate($member['groupterms']['ext'][$group['groupid']], 'Y-n-j') : '').'" onclick="showcalendar(event, this)" />'
  895. ), TRUE);
  896. }
  897. if($group['groupid'] && $group['type'] == 'member' && !($member['credits'] >= $group['creditshigher'] && $member['credits'] < $group['creditslower']) && $member['groupid'] != $group['groupid']) {
  898. continue;
  899. }
  900. $expgroups .= '<option name="expgroupidnew" value="'.$group['groupid'].'" '.$selectegid[$group['groupid']].'>'.$group['grouptitle'].'</option>';
  901. if($group['groupid'] != 0) {
  902. $group['type'] = $group['type'] == 'special' && $group['radminid'] ? 'specialadmin' : $group['type'];
  903. $groups[$group['type']] .= '<option value="'.$group['groupid'].'"'.($member['groupid'] == $group['groupid'] ? 'selected="selected"' : '').' gtype="'.$group['type'].'">'.$group['grouptitle'].'</option>';
  904. if($group['type'] == 'special' && !$group['radminid']) {
  905. $radmingids .= ','.$group['groupid'];
  906. }
  907. }
  908. }
  909. if(!$groups['member']) {
  910. $group = C::t('common_usergroup')->fetch_new_groupid(true);
  911. $groups['member'] = '<option value="'.$group['groupid'].'" gtype="member">'.$group['grouptitle'].'</option>';
  912. }
  913. shownav('user', 'members_group');
  914. showsubmenu('members_group_member', array(), '', array('username' => $member['username']));
  915. echo '<script src="static/js/calendar.js" type="text/javascript"></script>';
  916. showformheader("members&operation=group&uid=$member[uid]");
  917. showtableheader('usergroup', 'nobottom');
  918. showsetting('members_group_group', '', '', '<select name="groupidnew" onchange="if(in_array(this.value, ['.$radmingids.'])) {$(\'relatedadminid\').style.display = \'\';$(\'adminidnew\').name=\'adminidnew[\' + this.value + \']\';} else {$(\'relatedadminid\').style.display = \'none\';$(\'adminidnew\').name=\'adminidnew[0]\';}"><optgroup label="'.$lang['usergroups_system'].'">'.$groups['system'].'<optgroup label="'.$lang['usergroups_special'].'">'.$groups['special'].'<optgroup label="'.$lang['usergroups_specialadmin'].'">'.$groups['specialadmin'].'<optgroup label="'.$lang['usergroups_member'].'">'.$groups['member'].'</select>');
  919. showtagheader('tbody', 'relatedadminid', $member['type'] == 'special' && !$member['radminid'], 'sub');
  920. showsetting('members_group_related_adminid', '', '', '<select id="adminidnew" name="adminidnew['.$member['groupid'].']"><option value="0"'.($member['adminid'] == 0 ? ' selected' : '').'>'.$lang['none'].'</option><option value="3"'.($member['adminid'] == 3 ? ' selected' : '').'>'.$lang['usergroups_system_3'].'</option><option value="2"'.($member['adminid'] == 2 ? ' selected' : '').'>'.$lang['usergroups_system_2'].'</option><option value="1"'.($member['adminid'] == 1 ? ' selected' : '').'>'.$lang['usergroups_system_1'].'</option></select>');
  921. showtagfooter('tbody');
  922. showsetting('members_group_validity', 'expirydatenew', $expirydate, 'calendar');
  923. showsetting('members_group_orig_adminid', '', '', '<select name="expgroupidnew">'.$expgroups.'</select>');
  924. showsetting('members_group_orig_groupid', '', '', '<select name="expadminidnew"><option value="0" '.$selecteaid[0].'>'.$lang['usergroups_system_0'].'</option><option value="1" '.$selecteaid[1].'>'.$lang['usergroups_system_1'].'</option><option value="2" '.$selecteaid[2].'>'.$lang['usergroups_system_2'].'</option><option value="3" '.$selecteaid[3].'>'.$lang['usergroups_system_3'].'</option></select>');
  925. showtablefooter();
  926. showtableheader('members_group_extended', 'noborder fixpadding');
  927. showsubtitle(array('usergroup', 'validity'));
  928. echo $extgroups;
  929. showtablerow('', 'colspan="2"', cplang('members_group_extended_comment'));
  930. showtablefooter();
  931. showtableheader('members_edit_reason', 'notop');
  932. showsetting('members_group_ban_reason', 'reason', '', 'textarea');
  933. showsubmit('editsubmit');
  934. showtablefooter();
  935. showformfooter();
  936. } else {
  937. $group = C::t('common_usergroup')->fetch($_GET['groupidnew']);
  938. if(!$group) {
  939. cpmsg('undefined_action', '', 'error');
  940. }
  941. if(strlen(is_array($_GET['extgroupidsnew']) ? implode("\t", $_GET['extgroupidsnew']) : '') > 30) {
  942. cpmsg('members_edit_groups_toomany', '', 'error');
  943. }
  944. if($member['groupid'] != $_GET['groupidnew'] && isfounder($member)) {
  945. cpmsg('members_edit_groups_isfounder', '', 'error');
  946. }
  947. $_GET['adminidnew'] = $_GET['adminidnew'][$_GET['groupidnew']];
  948. switch($group['type']) {
  949. case 'member':
  950. $_GET['groupidnew'] = in_array($_GET['adminidnew'], array(1, 2, 3)) ? $_GET['adminidnew'] : $_GET['groupidnew'];
  951. break;
  952. case 'special':
  953. if($group['radminid']) {
  954. $_GET['adminidnew'] = $group['radminid'];
  955. } elseif(!in_array($_GET['adminidnew'], array(1, 2, 3))) {
  956. $_GET['adminidnew'] = -1;
  957. }
  958. break;
  959. case 'system':
  960. $_GET['adminidnew'] = in_array($_GET['groupidnew'], array(1, 2, 3)) ? $_GET['groupidnew'] : -1;
  961. break;
  962. }
  963. $groupterms = array();
  964. if($_GET['expirydatenew']) {
  965. $maingroupexpirynew = strtotime($_GET['expirydatenew']);
  966. $group = C::t('common_usergroup')->fetch($_GET['expgroupidnew']);
  967. if(!$group) {
  968. $_GET['expgroupidnew'] = in_array($_GET['expadminidnew'], array(1, 2, 3)) ? $_GET['expadminidnew'] : $_GET['expgroupidnew'];
  969. } else {
  970. switch($group['type']) {
  971. case 'special':
  972. if($group['radminid']) {
  973. $_GET['expadminidnew'] = $group['radminid'];
  974. } elseif(!in_array($_GET['expadminidnew'], array(1, 2, 3))) {
  975. $_GET['expadminidnew'] = -1;
  976. }
  977. break;
  978. case 'system':
  979. $_GET['expadminidnew'] = in_array($_GET['expgroupidnew'], array(1, 2, 3)) ? $_GET['expgroupidnew'] : -1;
  980. break;
  981. }
  982. }
  983. if($_GET['expgroupidnew'] == $_GET['groupidnew']) {
  984. cpmsg('members_edit_groups_illegal', '', 'error');
  985. } elseif($maingroupexpirynew > TIMESTAMP) {
  986. if($_GET['expgroupidnew'] || $_GET['expadminidnew']) {
  987. $groupterms['main'] = array('time' => $maingroupexpirynew, 'adminid' => $_GET['expadminidnew'], 'groupid' => $_GET['expgroupidnew']);
  988. } else {
  989. $groupterms['main'] = array('time' => $maingroupexpirynew);
  990. }
  991. $groupterms['ext'][$_GET['groupidnew']] = $maingroupexpirynew;
  992. }
  993. }
  994. if(is_array($_GET['extgroupexpirynew'])) {
  995. foreach($_GET['extgroupexpirynew'] as $extgroupid => $expiry) {
  996. if(is_array($_GET['extgroupidsnew']) && in_array($extgroupid, $_GET['extgroupidsnew']) && !isset($groupterms['ext'][$extgroupid]) && $expiry && ($expiry = strtotime($expiry)) > TIMESTAMP) {
  997. $groupterms['ext'][$extgroupid] = $expiry;
  998. }
  999. }
  1000. }
  1001. $grouptermsnew = serialize($groupterms);
  1002. $groupexpirynew = groupexpiry($groupterms);
  1003. $extgroupidsnew = $_GET['extgroupidsnew'] && is_array($_GET['extgroupidsnew']) ? implode("\t", $_GET['extgroupidsnew']) : '';
  1004. C::t('common_member'.$tableext)->update($member['uid'], array('groupid'=>$_GET['groupidnew'], 'adminid'=>$_GET['adminidnew'], 'extgroupids'=>$extgroupidsnew, 'groupexpiry'=>$groupexpirynew));
  1005. if(C::t('common_member_field_forum'.$tableext)->fetch($member['uid'])) {
  1006. C::t('common_member_field_forum'.$tableext)->update($member['uid'], array('groupterms' => $grouptermsnew));
  1007. } else {
  1008. C::t('common_member_field_forum'.$tableext)->insert(array('uid' => $member['uid'], 'groupterms' => $grouptermsnew));
  1009. }
  1010. if($_GET['groupidnew'] != $member['groupid'] && (in_array($_GET['groupidnew'], array(4, 5)) || in_array($member['groupid'], array(4, 5)))) {
  1011. $my_opt = in_array($_GET['groupidnew'], array(4, 5)) ? 'banuser' : 'unbanuser';
  1012. $log_handler = Cloud::loadClass('Cloud_Service_SearchHelper');
  1013. $log_handler->myThreadLog($my_opt, array('uid' => $member['uid']));
  1014. banlog($member['username'], $member['groupid'], $_GET['groupidnew'], $groupexpirynew, $_GET['reason']);
  1015. }
  1016. cpmsg('members_edit_groups_succeed', "action=members&operation=group&uid=$member[uid]", 'succeed');
  1017. }
  1018. } elseif($operation == 'credit' && $_G['setting']['extcredits']) {
  1019. if($tableext) {
  1020. cpmsg('members_edit_credits_failure', '', 'error');
  1021. }
  1022. $membercount = C::t('common_member_count'.$tableext)->fetch($member['uid']);
  1023. $membergroup = C::t('common_usergroup')->fetch($member['groupid']);
  1024. $member = array_merge($member, $membercount, $membergroup);
  1025. if(!submitcheck('creditsubmit')) {
  1026. eval("\$membercredit = @round({$_G[setting][creditsformula]});");
  1027. if(($jscreditsformula = C::t('common_setting')->fetch('creditsformula'))) {
  1028. $jscreditsformula = str_replace(array('digestposts', 'posts', 'threads'), array($member['digestposts'], $member['posts'],$member['threads']), $jscreditsformula);
  1029. }
  1030. $creditscols = array('members_credit_ranges', 'credits');
  1031. $creditsvalue = array($member['type'] == 'member' ? "$member[creditshigher]~$member[creditslower]" : 'N/A', '<input type="text" class="txt" name="jscredits" id="jscredits" value="'.$membercredit.'" size="6" disabled style="padding:0;width:6em;border:none; background-color:transparent">');
  1032. for($i = 1; $i <= 8; $i++) {
  1033. $jscreditsformula = str_replace('extcredits'.$i, "extcredits[$i]", $jscreditsformula);
  1034. $creditscols[] = isset($_G['setting']['extcredits'][$i]) ? $_G['setting']['extcredits'][$i]['title'] : 'extcredits'.$i;
  1035. $creditsvalue[] = isset($_G['setting']['extcredits'][$i]) ? '<input type="text" class="txt" size="3" name="extcreditsnew['.$i.']" id="extcreditsnew['.$i.']" value="'.$member['extcredits'.$i].'" onkeyup="membercredits()"> '.$_G['setting']['extcredits']['$i']['unit'] : '<input type="text" class="txt" size="3" value="N/A" disabled>';
  1036. }
  1037. echo <<<EOT
  1038. <script language="JavaScript">
  1039. var extcredits = new Array();
  1040. function membercredits() {
  1041. var credits = 0;
  1042. for(var i = 1; i <= 8; i++) {
  1043. e = $('extcreditsnew['+i+']');
  1044. if(e && parseInt(e.value)) {
  1045. extcredits[i] = parseInt(e.value);
  1046. } else {
  1047. extcredits[i] = 0;
  1048. }
  1049. }
  1050. $('jscredits').value = Math.round($jscreditsformula);
  1051. }
  1052. </script>
  1053. EOT;
  1054. shownav('user', 'members_credit');
  1055. showsubmenu('members_credit');
  1056. showtips('members_credit_tips');
  1057. showformheader("members&operation=credit&uid={$_GET['uid']}");
  1058. showtableheader('<em class="right"><a href="'.ADMINSCRIPT.'?action=logs&operation=credit&srch_uid='.$_GET['uid'].'&frame=yes" target="_blank">'.cplang('members_credit_logs').'</a></em>'.cplang('members_credit').' - '.$member['username'].'('.$member['grouptitle'].')', 'nobottom');
  1059. showsubtitle($creditscols);
  1060. showtablerow('', array('', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"', 'class="td28"'), $creditsvalue);
  1061. showtablefooter();
  1062. showtableheader('', 'notop');
  1063. showtitle('members_edit_reason');
  1064. showsetting('members_credit_reason', 'reason', '', 'textarea');
  1065. showsubmit('creditsubmit');
  1066. showtablefooter();
  1067. showformfooter();
  1068. } else {
  1069. $diffarray = array();
  1070. $sql = $comma = '';
  1071. if(is_array($_GET['extcreditsnew'])) {
  1072. foreach($_GET['extcreditsnew'] as $id => $value) {
  1073. if($member['extcredits'.$id] != ($value = intval($value))) {
  1074. $diffarray[$id] = $value - $member['extcredits'.$id];
  1075. $sql .= $comma."extcredits$id='$value'";
  1076. $comma = ', ';
  1077. }
  1078. }
  1079. }
  1080. if($diffarray) {
  1081. foreach($diffarray as $id => $diff) {
  1082. $logs[] = dhtmlspecialchars("$_G[timestamp]\t{$_G[member][username]}\t$_G[adminid]\t$member[username]\t$id\t$diff\t0\t\t{$_GET['reason']}");
  1083. }
  1084. updatemembercount($_GET['uid'], $diffarray);
  1085. writelog('ratelog', $logs);
  1086. }
  1087. cpmsg('members_edit_credits_succeed', "action=members&operation=credit&uid={$_GET['uid']}", 'succeed');
  1088. }
  1089. } elseif($operation == 'medal') {
  1090. $membermf = C::t('common_member_field_forum'.$tableext)->fetch($_GET['uid']);
  1091. $member = array_merge($member, $membermf);
  1092. if(!submitcheck('medalsubmit')) {
  1093. $medals = '';
  1094. $membermedals = array();
  1095. loadcache('medals');
  1096. foreach (explode("\t", $member['medals']) as $key => $membermedal) {
  1097. list($medalid, $medalexpiration) = explode("|", $membermedal);
  1098. if(isset($_G['cache']['medals'][$medalid]) && (!$medalexpiration || $medalexpiration > TIMESTAMP)) {
  1099. $membermedals[$key] = $medalid;
  1100. } else {
  1101. unset($membermedals[$key]);
  1102. }
  1103. }
  1104. foreach(C::t('forum_medal')->fetch_all_data(1) as $medal) {
  1105. $medals .= showtablerow('', array('class="td25"', 'class="td23"'), array(
  1106. "<input class=\"checkbox\" type=\"checkbox\" name=\"medals[$medal[medalid]]\" value=\"1\" ".(in_array($medal['medalid'], $membermedals) ? 'checked' : '')." />",
  1107. "<img src=\"static/image/common/$medal[image]\" />",
  1108. $medal['name']
  1109. ), TRUE);
  1110. }
  1111. if(!$medals) {
  1112. cpmsg('members_edit_medals_nonexistence', '', 'error');
  1113. }
  1114. shownav('user', 'nav_members_confermedal');
  1115. showsubmenu('nav_members_confermedal');
  1116. showformheader("members&operation=medal&uid={$_GET['uid']}");
  1117. showtableheader("$lang[members_confermedal_to] <a href='home.php?mod=space&uid={$_GET['uid']}' target='_blank'>$member[username]</a>", 'fixpadding');
  1118. showsubtitle(array('medals_grant', 'medals_image', 'name'));
  1119. echo $medals;
  1120. showsubmit('medalsubmit');
  1121. showtablefooter();
  1122. showformfooter();
  1123. } else {
  1124. $medalsdel = $medalsadd = $medalsnew = $origmedalsarray = $medalsarray = array();
  1125. if(is_array($_GET['medals'])) {
  1126. foreach($_GET['medals'] as $medalid => $newgranted) {
  1127. if($newgranted) {
  1128. $medalsarray[] = $medalid;
  1129. }
  1130. }
  1131. }
  1132. loadcache('medals');
  1133. foreach($member['medals'] = explode("\t", $member['medals']) as $key => $modmedalid) {
  1134. list($medalid, $medalexpiration) = explode("|", $modmedalid);
  1135. if(isset($_G['cache']['medals'][$medalid]) && (!$medalexpiration || $medalexpiration > TIMESTAMP)) {
  1136. $origmedalsarray[] = $medalid;
  1137. }
  1138. }
  1139. foreach(array_unique(array_merge($origmedalsarray, $medalsarray)) as $medalid) {
  1140. if($medalid) {
  1141. $orig = in_array($medalid, $origmedalsarray);
  1142. $new = in_array($medalid, $medalsarray);
  1143. if($orig != $new) {
  1144. if($orig && !$new) {
  1145. $medalsdel[] = $medalid;
  1146. } elseif(!$orig && $new) {
  1147. $medalsadd[] = $medalid;
  1148. }
  1149. }
  1150. }
  1151. }
  1152. if(!empty($medalsarray)) {
  1153. foreach(C::t('forum_medal')->fetch_all_by_id($medalsarray) as $modmedal) {
  1154. if(empty($modmedal['expiration'])) {
  1155. $medalsnew[] = $modmedal[medalid];
  1156. $medalstatus = 0;
  1157. } else {
  1158. $modmedal['expiration'] = TIMESTAMP + $modmedal['expiration'] * 86400;
  1159. $medalsnew[] = $modmedal[medalid].'|'.$modmedal['expiration'];
  1160. $medalstatus = 1;
  1161. }
  1162. if(in_array($modmedal['medalid'], $medalsadd)) {
  1163. $data = array(
  1164. 'uid' => $_GET['uid'],
  1165. 'medalid' => $modmedal['medalid'],
  1166. 'type' => 0,
  1167. 'dateline' => $_G['timestamp'],
  1168. 'expiration' => $modmedal['expiration'],
  1169. 'status' => $medalstatus,
  1170. );
  1171. C::t('forum_medallog')->insert($data);
  1172. C::t('common_member_medal')->insert(array('uid' => $_GET['uid'], 'medalid' => $modmedal['medalid']), 0, 1);
  1173. }
  1174. }
  1175. }
  1176. if(!empty($medalsdel)) {
  1177. C::t('forum_medallog')->update_type_by_uid_medalid(4, $_GET['uid'], $medalsdel);
  1178. C::t('common_member_medal')->delete_by_uid_medalid($_GET['uid'], $medalsdel);
  1179. }
  1180. $medalsnew = implode("\t", $medalsnew);
  1181. C::t('common_member_field_forum'.$tableext)->update($_GET['uid'], array('medals' => $medalsnew));
  1182. cpmsg('members_edit_medals_succeed', "action=members&operation=medal&uid={$_GET['uid']}", 'succeed');
  1183. }
  1184. } elseif($operation == 'ban') {
  1185. $membermf = C::t('common_member_field_forum'.$tableext)->fetch($_GET['uid']);
  1186. $membergroup = C::t('common_usergroup')->fetch($member['groupid']);
  1187. $membergroupfield = C::t('common_usergroup_field')->fetch($member['groupid']);
  1188. $member = array_merge($member, $membermf, $membergroup, $membergroupfield);
  1189. if(($member['type'] == 'system' && in_array($member['groupid'], array(1, 2, 3, 6, 7, 8))) || $member['type'] == 'special') {
  1190. cpmsg('members_edit_illegal', '', 'error', array('grouptitle' => $member['grouptitle'], 'uid' => $member['uid']));
  1191. }
  1192. if($member['allowadmincp']) {
  1193. cpmsg('members_edit_illegal_portal', '', 'error',array('uid' => $member['uid']));
  1194. }
  1195. $member['groupterms'] = dunserialize($member['groupterms']);
  1196. $member['banexpiry'] = !empty($member['groupterms']['main']['time']) && ($member['groupid'] == 4 || $member['groupid'] == 5) ? dgmdate($member['groupterms']['main']['time'], 'Y-n-j') : '';
  1197. if(!submitcheck('bansubmit')) {
  1198. echo '<script src="static/js/calendar.js" type="text/javascript"></script>';
  1199. shownav('user', 'members_ban_user');
  1200. showsubmenu($lang['members_ban_user'].($member['username'] ? ' - '.$member['username'] : ''));
  1201. showtips('members_ban_tips');
  1202. showformheader('members&operation=ban');
  1203. showtableheader();
  1204. showsetting('members_ban_username', 'username', $member['username'], 'text', null, null, '<input type="button" id="crimebtn" class="btn" style="margin-top:-1px;display:none;" onclick="getcrimerecord();" value="'.$lang['crime_checkrecord'].'" />', 'onkeyup="showcrimebtn(this);" id="banusername"');
  1205. if($member) {
  1206. showtagheader('tbody', 'member_status', 1);
  1207. showtablerow('', 'class="td27" colspan="2"', cplang('members_edit_current_status').'<span class="normal">: '.($member['groupid'] == 4 ? $lang['members_ban_post'] : ($member['groupid'] == 5 ? $lang['members_ban_visit'] : ($member['status'] == -1 ? $lang['members_ban_status'] : $lang['members_ban_none']))).'</span>');
  1208. include_once libfile('function/member');
  1209. $clist = crime('getactionlist', $member['uid']);
  1210. if($clist) {
  1211. echo '<tr><td class="td27" colspan="2">'.$lang[members_ban_crime_record].':</td></tr>';
  1212. echo '<tr><td colspan="2" style="padding:0 !important;border-top:none;"><table style="width:100%;">';
  1213. showtablerow('class="partition"', array('width="15%"', 'width="10%"', 'width="20%"', '', 'width="15%"'), array($lang['crime_user'], $lang['crime_action'], $lang['crime_dateline'], $lang['crime_reason'], $lang['crime_operator']));
  1214. foreach($clist as $crime) {
  1215. showtablerow('', '', array('<a href="home.php?mod=space&uid='.$member['uid'].'">'.$member['username'], $lang[$crime['action']], date('Y-m-d H:i:s', $crime['dateline']), $crime['reason'], '<a href="home.php?mod=space&uid='.$crime['operatorid'].'" target="_blank">'.$crime['operator'].'</a>'));
  1216. }
  1217. echo '</table></td></tr>';
  1218. }
  1219. showtagfooter('tbody');
  1220. }
  1221. showsetting('members_ban_type', array('bannew', array(
  1222. array('', $lang['members_ban_none'], array('validity' => 'none')),
  1223. array('post', $lang['members_ban_post'], array('validity' => '')),
  1224. array('visit', $lang['members_ban_visit'], array('validity' => '')),
  1225. array('status', $lang['members_ban_status'], array('validity' => 'none'))
  1226. )), '', 'mradio');
  1227. showtagheader('tbody', 'validity', false, 'sub');
  1228. showsetting('members_ban_validity', '', '', selectday('banexpirynew', array(0, 1, 3, 5, 7, 14, 30, 60, 90, 180, 365)));
  1229. showtagfooter('tbody');
  1230. print <<<EOF
  1231. <tr>
  1232. <td class="td27" colspan="2">$lang[members_ban_clear_content]:</td>
  1233. </tr>
  1234. <tr>
  1235. <td colspan="2">
  1236. <ul class="dblist" onmouseover="altStyle(this);">
  1237. <li style="width: 100%;"><input type="checkbox" name="chkall" onclick="checkAll('prefix', this.form, 'clear')" class="checkbox">&nbsp;$lang[select_all]</li>
  1238. <li style="width: 8%;"><input type="checkbox" value="post" name="clear[post]" class="checkbox">&nbsp;$lang[members_ban_delpost]</li>
  1239. <li style="width: 8%;"><input type="checkbox" value="follow" name="clear[follow]" class="checkbox">&nbsp;$lang[members_ban_delfollow]</li>
  1240. <li style="width: 8%;"><input type="checkbox" value="postcomment" name="clear[postcomment]" class="checkbox">&nbsp;$lang[members_ban_postcomment]</li>
  1241. <li style="width: 8%;"><input type="checkbox" value="doing" name="clear[doing]" class="checkbox">&nbsp;$lang[members_ban_deldoing]</li>
  1242. <li style="width: 8%;"><input type="checkbox" value="blog" name="clear[blog]" class="checkbox">&nbsp;$lang[members_ban_delblog]</li>
  1243. <li style="width: 8%;"><input type="checkbox" value="album" name="clear[album]" class="checkbox">&nbsp;$lang[members_ban_delalbum]</li>
  1244. <li style="width: 8%;"><input type="checkbox" value="share" name="clear[share]" class="checkbox">&nbsp;$lang[members_ban_delshare]</li>
  1245. <li style="width: 8%;"><input type="checkbox" value="avatar" name="clear[avatar]" class="checkbox">&nbsp;$lang[members_ban_delavatar]</li>
  1246. <li style="width: 8%;"><input type="checkbox" value="comment" name="clear[comment]" class="checkbox">&nbsp;$lang[members_ban_delcomment]</li>
  1247. </ul>
  1248. </td>
  1249. </tr>
  1250. EOF;
  1251. showsetting('members_ban_reason', 'reason', '', 'textarea');
  1252. showsubmit('bansubmit');
  1253. showtablefooter();
  1254. showformfooter();
  1255. $basescript = ADMINSCRIPT;
  1256. print <<<EOF
  1257. <script type="text/javascript">
  1258. var oldbanusername = '$member[username]';
  1259. function showcrimebtn(obj) {
  1260. if(oldbanusername == obj.value) {
  1261. return;
  1262. }
  1263. oldbanusername = obj.value;
  1264. $('crimebtn').style.display = '';
  1265. if($('member_status')) {
  1266. $('member_status').style.display = 'none';
  1267. }
  1268. }
  1269. function getcrimerecord() {
  1270. if($('banusername').value) {
  1271. window.location.href = '$basescript?action=members&operation=ban&username=' + $('banusername').value;
  1272. }
  1273. }
  1274. </script>
  1275. EOF;
  1276. } else {
  1277. if(empty($member)) {
  1278. cpmsg('members_edit_nonexistence');
  1279. }
  1280. $setarr = array();
  1281. $reason = trim($_GET['reason']);
  1282. if(!$reason && ($_G['group']['reasonpm'] == 1 || $_G['group']['reasonpm'] == 3)) {
  1283. cpmsg('members_edit_reason_invalid', '', 'error');
  1284. }
  1285. $my_data = array();
  1286. $mylogtype = '';
  1287. if(in_array($_GET['bannew'], array('post', 'visit', 'status'))) {
  1288. $my_data = array('uid' => $member['uid']);
  1289. if($_GET['delpost']) {
  1290. $my_data['otherid'] = 1;
  1291. }
  1292. $mylogtype = 'banuser';
  1293. } elseif($member['groupid'] == 4 || $member['groupid'] == 5 || $member['status'] == '-1') {
  1294. $my_data = array('uid' => $member['uid']);
  1295. $mylogtype = 'unbanuser';
  1296. }
  1297. if($_GET['bannew'] == 'post' || $_GET['bannew'] == 'visit') {
  1298. $groupidnew = $_GET['bannew'] == 'post' ? 4 : 5;
  1299. $_GET['banexpirynew'] = !empty($_GET['banexpirynew']) ? TIMESTAMP + $_GET['banexpirynew'] * 86400 : 0;
  1300. $_GET['banexpirynew'] = $_GET['banexpirynew'] > TIMESTAMP ? $_GET['banexpirynew'] : 0;
  1301. if($_GET['banexpirynew']) {
  1302. $member['groupterms']['main'] = array('time' => $_GET['banexpirynew'], 'adminid' => $member['adminid'], 'groupid' => $member['groupid']);
  1303. $member['groupterms']['ext'][$groupidnew] = $_GET['banexpirynew'];
  1304. $setarr['groupexpiry'] = groupexpiry($member['groupterms']);
  1305. } else {
  1306. $setarr['groupexpiry'] = 0;
  1307. }
  1308. $adminidnew = -1;
  1309. $my_data['expiry'] = groupexpiry($member['groupterms']);
  1310. $postcomment_cache_pid = array();
  1311. foreach(C::t('forum_postcomment')->fetch_all_by_authorid($member['uid']) as $postcomment) {
  1312. $postcomment_cache_pid[$postcomment['pid']] = $postcomment['pid'];
  1313. }
  1314. C::t('forum_postcomment')->delete_by_authorid($member['uid'], false, true);
  1315. if($postcomment_cache_pid) {
  1316. C::t('forum_postcache')->delete($postcomment_cache_pid);
  1317. }
  1318. if(!$member['adminid']) {
  1319. $member_status = C::t('common_member_status')->fetch($member['uid']);
  1320. if($member_status) {
  1321. captcha::report($member_status['lastip']);
  1322. }
  1323. }
  1324. } elseif($member['groupid'] == 4 || $member['groupid'] == 5) {
  1325. if(!empty($member['groupterms']['main']['groupid'])) {
  1326. $groupidnew = $member['groupterms']['main']['groupid'];
  1327. $adminidnew = $member['groupterms']['main']['adminid'];
  1328. unset($member['groupterms']['main']);
  1329. unset($member['groupterms']['ext'][$member['groupid']]);
  1330. $setarr['groupexpiry'] = groupexpiry($member['groupterms']);
  1331. }
  1332. $groupnew = C::t('common_usergroup')->fetch_by_credits($member['credits']);
  1333. $groupidnew = $groupnew['groupid'];
  1334. $adminidnew = 0;
  1335. } else {
  1336. $update = false;
  1337. $groupidnew = $member['groupid'];
  1338. $adminidnew = $member['adminid'];
  1339. if(in_array('avatar', $_GET['clear'])) {
  1340. $setarr['avatarstatus'] = 0;
  1341. loaducenter();
  1342. uc_user_deleteavatar($member['uid']);
  1343. }
  1344. }
  1345. if(!empty($my_data) && !empty($mylogtype)) {
  1346. $log_handler = Cloud::loadClass('Cloud_Service_SearchHelper');
  1347. $log_handler->myThreadLog($mylogtype, $my_data);
  1348. }
  1349. $setarr['adminid'] = $adminidnew;
  1350. $setarr['groupid'] = $groupidnew;
  1351. $setarr['status'] = $_GET['bannew'] == 'status' ? -1 : 0;
  1352. C::t('common_member'.$tableext)->update($member['uid'], $setarr);
  1353. if($_G['group']['allowbanuser'] && (DB::affected_rows())) {
  1354. banlog($member['username'], $member['groupid'], $groupidnew, $_GET['banexpirynew'], $reason, $_GET['bannew'] == 'status' ? -1 : 0);
  1355. }
  1356. C::t('common_member_field_forum'.$tableext)->update($member['uid'],array('groupterms' => ($member['groupterms'] ? serialize($member['groupterms']) : '')));
  1357. $crimeaction = $noticekey = '';
  1358. include_once libfile('function/member');
  1359. if($_GET['bannew'] == 'post') {
  1360. $crimeaction = 'crime_banspeak';
  1361. $noticekey = 'member_ban_speak';
  1362. $from_idtype = 'banspeak';
  1363. } elseif($_GET['bannew'] == 'visit') {
  1364. $crimeaction = 'crime_banvisit';
  1365. $noticekey = 'member_ban_visit';
  1366. $from_idtype = 'banvisit';
  1367. } elseif($_GET['bannew'] == 'status') {
  1368. $crimeaction = 'crime_banstatus';
  1369. $noticekey = 'member_ban_status';
  1370. $from_idtype = 'banstatus';
  1371. }
  1372. if($crimeaction) {
  1373. crime('recordaction', $member['uid'], $crimeaction, lang('forum/misc', 'crime_reason', array('reason' => $reason)));
  1374. }
  1375. if($noticekey) {
  1376. $notearr = array(
  1377. 'user' => "<a href=\"home.php?mod=space&uid=$_G[uid]\">$_G[username]</a>",
  1378. 'day' => intval($_POST['banexpirynew']),
  1379. 'reason' => $reason,
  1380. 'from_id' => 0,
  1381. 'from_idtype' => $from_idtype
  1382. );
  1383. notification_add($member['uid'], 'system', $noticekey, $notearr, 1);
  1384. }
  1385. if($_G['adminid'] == 1 && !empty($_GET['clear']) && is_array($_GET['clear'])) {
  1386. require_once libfile('function/delete');
  1387. $membercount = array();
  1388. if(in_array('post', $_GET['clear'])) {
  1389. if($member['uid']) {
  1390. require_once libfile('function/post');
  1391. $tidsdelete = array();
  1392. loadcache('posttableids');
  1393. $posttables = empty($_G['cache']['posttableids']) ? array(0) : $_G['cache']['posttableids'];
  1394. foreach($posttables as $posttableid) {
  1395. $pidsthread = $pidsdelete = array();
  1396. $postlist = C::t('forum_post')->fetch_all_by_authorid($posttableid, $member['uid'], false);
  1397. if($postlist) {
  1398. foreach($postlist as $post) {
  1399. $prune['forums'][] = $post['fid'];
  1400. $prune['thread'][$post['tid']]++;
  1401. if($post['first']) {
  1402. $tidsdelete[] = $post['tid'];
  1403. }
  1404. $pidsdelete[] = $post['pid'];
  1405. $pidsthread[$post['pid']] = $post['tid'];
  1406. }
  1407. foreach($pidsdelete as $key=>$pid) {
  1408. if(in_array($pidsthread[$pid], $tidsdelete)) {
  1409. unset($pidsdelete[$key]);
  1410. unset($prune['thread'][$pidsthread[$pid]]);
  1411. updatemodlog($pidsthread[$pid], 'DEL');
  1412. } else {
  1413. updatemodlog($pidsthread[$pid], 'DLP');
  1414. }
  1415. }
  1416. }
  1417. deletepost($pidsdelete, 'pid', false, $posttableid, true);
  1418. }
  1419. unset($postlist);
  1420. if($tidsdelete) {
  1421. deletethread($tidsdelete, true, true, true);
  1422. }
  1423. if(!empty($prune)) {
  1424. foreach($prune['thread'] as $tid => $decrease) {
  1425. updatethreadcount($tid);
  1426. }
  1427. foreach(array_unique($prune['forums']) as $fid) {
  1428. }
  1429. }
  1430. if($_G['setting']['globalstick']) {
  1431. updatecache('globalstick');
  1432. }
  1433. }
  1434. $membercount['posts'] = 0;
  1435. $membercount['threads'] = 0;
  1436. }
  1437. if(in_array('follow', $_GET['clear'])) {
  1438. C::t('home_follow_feed')->delete_by_uid($member['uid']);
  1439. $membercount['feeds'] = 0;
  1440. }
  1441. if(in_array('blog', $_GET['clear'])) {
  1442. $blogids = array();
  1443. $query = C::t('home_blog')->fetch_blogid_by_uid($member['uid']);
  1444. foreach($query as $value) {
  1445. $blogids[] = $value['blogid'];
  1446. }
  1447. if(!empty($blogids)) {
  1448. C::t('common_moderate')->delete($blogids, 'blogid');
  1449. }
  1450. C::t('home_blog')->delete_by_uid($member['uid']);
  1451. C::t('home_blogfield')->delete_by_uid($member['uid']);
  1452. C::t('home_feed')->delete_by_uid_idtype($member['uid'], 'blogid');
  1453. $membercount['blogs'] = 0;
  1454. }
  1455. if(in_array('album', $_GET['clear'])) {
  1456. C::t('home_album')->delete_by_uid($member['uid']);
  1457. $picids = array();
  1458. $query = C::t('home_pic')->fetch_all_by_uid($member['uid']);
  1459. foreach($query as $value) {
  1460. $picids[] = $value['picid'];
  1461. deletepicfiles($value);
  1462. }
  1463. if(!empty($picids)) {
  1464. C::t('common_moderate')->delete($picids, 'picid');
  1465. }
  1466. C::t('home_pic')->delete_by_uid($member['uid']);
  1467. C::t('home_feed')->delete_by_uid_idtype($member['uid'], 'albumid');
  1468. $membercount['albums'] = 0;
  1469. }
  1470. if(in_array('share', $_GET['clear'])) {
  1471. $shareids = array();
  1472. foreach(C::t('home_share')->fetch_all_by_uid($member['uid']) as $value) {
  1473. $shareids[] = $value['sid'];
  1474. }
  1475. if(!empty($shareids)) {
  1476. C::t('common_moderate')->delete($shareids, 'sid');
  1477. }
  1478. C::t('home_share')->delete_by_uid($member['uid']);
  1479. C::t('home_feed')->delete_by_uid_idtype($member['uid'], 'sid');
  1480. $membercount['sharings'] = 0;
  1481. }
  1482. if(in_array('doing', $_GET['clear'])) {
  1483. $doids = array();
  1484. $query = C::t('home_doing')->fetch_all_by_uid_doid(array($member['uid']));
  1485. foreach ($query as $value) {
  1486. $doids[$value['doid']] = $value['doid'];
  1487. }
  1488. if(!empty($doids)) {
  1489. C::t('common_moderate')->delete($doids, 'doid');
  1490. }
  1491. C::t('home_doing')->delete_by_uid($member['uid']);
  1492. C::t('common_member_field_home')->update($member['uid'], array('recentnote' => '', 'spacenote' => ''));
  1493. C::t('home_docomment')->delete_by_doid_uid(($doids ? $doids : null), $member['uid']);
  1494. C::t('home_feed')->delete_by_uid_idtype($member['uid'], 'doid');
  1495. $membercount['doings'] = 0;
  1496. }
  1497. if(in_array('comment', $_GET['clear'])) {
  1498. $delcids = array();
  1499. $query = C::t('home_comment')->fetch_all_by_uid($member['uid'], 0, 1);
  1500. foreach($query as $value) {
  1501. $key = $value['idtype'].'_cid';
  1502. $delcids[$key] = $value['cid'];
  1503. }
  1504. if(!empty($delcids)) {
  1505. foreach($delcids as $key => $ids) {
  1506. C::t('common_moderate')->delete($ids, $key);
  1507. }
  1508. }
  1509. C::t('home_comment')->delete_by_uid_idtype($member['uid']);
  1510. }
  1511. if(in_array('postcomment', $_GET['clear'])) {
  1512. $postcomment_cache_pid = array();
  1513. foreach(C::t('forum_postcomment')->fetch_all_by_authorid($member['uid']) as $postcomment) {
  1514. $postcomment_cache_pid[$postcomment['pid']] = $postcomment['pid'];
  1515. }
  1516. C::t('forum_postcomment')->delete_by_authorid($member['uid']);
  1517. if($postcomment_cache_pid) {
  1518. C::t('forum_postcache')->delete($postcomment_cache_pid);
  1519. }
  1520. }
  1521. if($membercount) {
  1522. DB::update('common_member_count'.$tableext, $membercount, "uid='$member[uid]'");
  1523. }
  1524. }
  1525. cpmsg('members_edit_succeed', 'action=members&operation=ban&uid='.$member['uid'], 'succeed');
  1526. }
  1527. } elseif($operation == 'access') {
  1528. require_once libfile('function/forumlist');
  1529. $forumlist = '<SELECT name="addfid">'.forumselect(FALSE, 0, 0, TRUE).'</select>';
  1530. loadcache('forums');
  1531. if(!submitcheck('accesssubmit')) {
  1532. shownav('user', 'members_access_edit');
  1533. showsubmenu('members_access_edit');
  1534. showtips('members_access_tips');
  1535. showtableheader(cplang('members_access_now').' - '.$member['username'], 'nobottom fixpadding');
  1536. showsubtitle(array('forum', 'members_access_view', 'members_access_post', 'members_access_reply', 'members_access_getattach', 'members_access_getimage', 'members_access_postattach', 'members_access_postimage', 'members_access_adminuser', 'members_access_dateline'));
  1537. $accessmasks = C::t('forum_access')->fetch_all_by_uid($_GET['uid']);
  1538. foreach ($accessmasks as $id => $access) {
  1539. $adminuser = C::t('common_member'.$tableext)->fetch($access['adminuser']);
  1540. $access['dateline'] = $access['dateline'] ? dgmdate($access['dateline']) : '';
  1541. $forum = $_G['cache']['forums'][$id];
  1542. showtablerow('', '', array(
  1543. ($forum['type'] == 'forum' ? '' : '|-----')."&nbsp;<a href=\"".ADMINSCRIPT."?action=forums&operation=edit&fid=$forum[fid]&anchor=perm\">$forum[name]</a>",
  1544. accessimg($access['allowview']),
  1545. accessimg($access['allowpost']),
  1546. accessimg($access['allowreply']),
  1547. accessimg($access['allowgetattach']),
  1548. accessimg($access['allowgetimage']),
  1549. accessimg($access['allowpostattach']),
  1550. accessimg($access['allowpostimage']),
  1551. $adminuser['username'],
  1552. $access['dateline'],
  1553. ));
  1554. }
  1555. if(empty($accessmasks)) {
  1556. showtablerow('', '', array(
  1557. '-',
  1558. '-',
  1559. '-',
  1560. '-',
  1561. '-',
  1562. '-',
  1563. '-',
  1564. '-',
  1565. '-',
  1566. '-',
  1567. ));
  1568. }
  1569. showtablefooter();
  1570. showformheader("members&operation=access&uid={$_GET['uid']}");
  1571. showtableheader(cplang('members_access_add'), 'notop fixpadding');
  1572. showsetting('members_access_add_forum', '', '', $forumlist);
  1573. foreach(array('view', 'post', 'reply', 'getattach', 'getimage', 'postattach', 'postimage') as $perm) {
  1574. showsetting('members_access_add_'.$perm, array('allow'.$perm.'new', array(
  1575. array(0, cplang('default')),
  1576. array(1, cplang('members_access_allowed')),
  1577. array(-1, cplang('members_access_disallowed')),
  1578. ), TRUE), 0, 'mradio');
  1579. }
  1580. showsubmit('accesssubmit', 'submit');
  1581. showtablefooter();
  1582. showformfooter();
  1583. } else {
  1584. $addfid = intval($_GET['addfid']);
  1585. if($addfid && $_G['cache']['forums'][$addfid]) {
  1586. $allowviewnew = !$_GET['allowviewnew'] ? 0 : ($_GET['allowviewnew'] > 0 ? 1 : -1);
  1587. $allowpostnew = !$_GET['allowpostnew'] ? 0 : ($_GET['allowpostnew'] > 0 ? 1 : -1);
  1588. $allowreplynew = !$_GET['allowreplynew'] ? 0 : ($_GET['allowreplynew'] > 0 ? 1 : -1);
  1589. $allowgetattachnew = !$_GET['allowgetattachnew'] ? 0 : ($_GET['allowgetattachnew'] > 0 ? 1 : -1);
  1590. $allowgetimagenew = !$_GET['allowgetimagenew'] ? 0 : ($_GET['allowgetimagenew'] > 0 ? 1 : -1);
  1591. $allowpostattachnew = !$_GET['allowpostattachnew'] ? 0 : ($_GET['allowpostattachnew'] > 0 ? 1 : -1);
  1592. $allowpostimagenew = !$_GET['allowpostimagenew'] ? 0 : ($_GET['allowpostimagenew'] > 0 ? 1 : -1);
  1593. if($allowviewnew == -1) {
  1594. $allowpostnew = $allowreplynew = $allowgetattachnew = $allowgetimagenew = $allowpostattachnew = $allowpostimagenew = -1;
  1595. } elseif($allowpostnew == 1 || $allowreplynew == 1 || $allowgetattachnew == 1 || $allowgetimagenew == 1 || $allowpostattachnew == 1 || $allowpostimagenew == 1) {
  1596. $allowviewnew = 1;
  1597. }
  1598. if(!$allowviewnew && !$allowpostnew && !$allowreplynew && !$allowgetattachnew && !$allowgetimagenew && !$allowpostattachnew && !$allowpostimagenew) {
  1599. C::t('forum_access')->delete_by_fid($addfid, $_GET['uid']);
  1600. if(!C::t('forum_access')->count_by_uid($_GET['uid'])) {
  1601. C::t('common_member'.$tableext)->update($_GET['uid'], array('accessmasks'=>0));
  1602. }
  1603. } else {
  1604. $data = array('uid' => $_GET['uid'], 'fid' => $addfid, 'allowview' => $allowviewnew, 'allowpost' => $allowpostnew, 'allowreply' => $allowreplynew, 'allowgetattach' => $allowgetattachnew, 'allowgetimage' => $allowgetimagenew, 'allowpostattach' => $allowpostattachnew, 'allowpostimage' => $allowpostimagenew, 'adminuser' => $_G['uid'], 'dateline' => $_G['timestamp']);
  1605. C::t('forum_access')->insert($data, 0, 1);
  1606. C::t('common_member'.$tableext)->update($_GET['uid'], array('accessmasks'=>1));
  1607. }
  1608. updatecache('forums');
  1609. }
  1610. cpmsg('members_access_succeed', 'action=members&operation=access&uid='.$_GET['uid'], 'succeed');
  1611. }
  1612. } elseif($operation == 'edit') {
  1613. $uid = $member['uid'];
  1614. if(!empty($_G['setting']['connect']['allow']) && $do == 'bindlog') {
  1615. $member = array_merge($member, C::t('#qqconnect#common_member_connect')->fetch($uid));
  1616. showsubmenu("$lang[members_edit] - $member[username]", array(
  1617. array('connect_member_info', 'members&operation=edit&uid='.$uid, 0),
  1618. array('connect_member_bindlog', 'members&operation=edit&do=bindlog&uid='.$uid, 1),
  1619. ));
  1620. if($member['conopenid']) {
  1621. showtableheader();
  1622. showtitle('connect_member_bindlog_uin');
  1623. showsubtitle(array('connect_member_bindlog_username', 'connect_member_bindlog_date', 'connect_member_bindlog_type'));
  1624. $bindlogs = $bindloguids = $usernames = array();
  1625. foreach(C::t('#qqconnect#connect_memberbindlog')->fetch_all_by_openids($member['conopenid']) as $bindlog) {
  1626. $bindlogs[$bindlog['dateline']] = $bindlog;
  1627. $bindloguids[] = $bindlog['uid'];
  1628. }
  1629. $usernames = C::t('common_member')->fetch_all_username_by_uid($bindloguids);
  1630. foreach($bindlogs as $k => $v) {
  1631. showtablerow('', array(), array(
  1632. $usernames[$v['uid']],
  1633. dgmdate($k),
  1634. cplang('connect_member_bindlog_type_'.$v['type']),
  1635. ));
  1636. }
  1637. showtablefooter();
  1638. }
  1639. showtableheader();
  1640. showtitle('connect_member_bindlog_uid');
  1641. showsubtitle(array('connect_member_bindlog_date', 'connect_member_bindlog_type'));
  1642. foreach(C::t('#qqconnect#connect_memberbindlog')->fetch_all_by_uids($member['uid']) as $bindlog) {
  1643. showtablerow('', array(), array(
  1644. dgmdate($bindlog['dateline']),
  1645. cplang('connect_member_bindlog_type_'.$bindlog['type']),
  1646. ));
  1647. }
  1648. showtablefooter();
  1649. exit;
  1650. }
  1651. $member = array_merge($member, C::t('common_member_field_forum'.$tableext)->fetch($uid),
  1652. C::t('common_member_field_home'.$tableext)->fetch($uid),
  1653. C::t('common_member_count'.$tableext)->fetch($uid),
  1654. C::t('common_member_status'.$tableext)->fetch($uid),
  1655. C::t('common_member_profile'.$tableext)->fetch($uid),
  1656. C::t('common_usergroup')->fetch($member['groupid']),
  1657. C::t('common_usergroup_field')->fetch($member['groupid']));
  1658. if(!empty($_G['setting']['connect']['allow'])) {
  1659. $member = array_merge($member, C::t('#qqconnect#common_member_connect')->fetch($uid));
  1660. $uin = C::t('common_uin_black')->fetch_by_uid($uid);
  1661. $member = array_merge($member, array('uinblack'=>$uin['uin']));
  1662. }
  1663. loadcache(array('profilesetting'));
  1664. $fields = array();
  1665. foreach($_G['cache']['profilesetting'] as $fieldid=>$field) {
  1666. if($field['available']) {
  1667. $_G['cache']['profilesetting'][$fieldid]['unchangeable'] = 0;
  1668. $fields[$fieldid] = $field['title'];
  1669. }
  1670. }
  1671. if(!submitcheck('editsubmit')) {
  1672. require_once libfile('function/editor');
  1673. $styleselect = "<select name=\"styleidnew\">\n<option value=\"\">$lang[use_default]</option>";
  1674. foreach(C::t('common_style')->fetch_all_data() as $style) {
  1675. $styleselect .= "<option value=\"$style[styleid]\" ".($style['styleid'] == $member['styleid'] ? 'selected="selected"' : '').">$style[name]</option>\n";
  1676. }
  1677. $styleselect .= '</select>';
  1678. $tfcheck = array($member['timeformat'] => 'checked');
  1679. $gendercheck = array($member['gender'] => 'checked');
  1680. $pscheck = array($member['pmsound'] => 'checked');
  1681. $member['regdate'] = dgmdate($member['regdate'], 'Y-n-j h:i A');
  1682. $member['lastvisit'] = dgmdate($member['lastvisit'], 'Y-n-j h:i A');
  1683. $member['bio'] = html2bbcode($member['bio']);
  1684. $member['signature'] = html2bbcode($member['sightml']);
  1685. shownav('user', 'members_edit');
  1686. showsubmenu("$lang[members_edit] - $member[username]", array(
  1687. array('connect_member_info', 'members&operation=edit&uid='.$uid, 1),
  1688. !empty($_G['setting']['connect']['allow']) ? array('connect_member_bindlog', 'members&operation=edit&do=bindlog&uid='.$uid, 0) : array(),
  1689. ));
  1690. showformheader("members&operation=edit&uid=$uid", 'enctype');
  1691. showtableheader();
  1692. $status = array($member['status'] => ' checked');
  1693. showsetting('members_edit_username', '', '', ($_G['setting']['connect']['allow'] && $member['conisbind'] ? ' <img class="vmiddle" src="static/image/common/connect_qq.gif" />' : '').' '.$member['username']);
  1694. showsetting('members_edit_avatar', '', '', ' <img src="'.avatar($uid, 'middle', true, false, true).'?random='.random(2).'" onerror="this.onerror=null;this.src=\''.$_G['setting']['ucenterurl'].'/images/noavatar_middle.gif\'" /><br /><br /><input name="clearavatar" class="checkbox" type="checkbox" value="1" /> '.$lang['members_edit_avatar_clear']);
  1695. $hrefext = "&detail=1&users=$member[username]&searchsubmit=1&perpage=50&fromumanage=1";
  1696. showsetting('members_edit_statistics', '', '', "<a href=\"".ADMINSCRIPT."?action=prune$hrefext\" class=\"act\">$lang[posts]($member[posts])</a>".
  1697. "<a href=\"".ADMINSCRIPT."?action=doing$hrefext\" class=\"act\">$lang[doings]($member[doings])</a>".
  1698. "<a href=\"".ADMINSCRIPT."?action=blog$hrefext\" class=\"act\">$lang[blogs]($member[blogs])</a>".
  1699. "<a href=\"".ADMINSCRIPT."?action=album$hrefext\" class=\"act\">$lang[albums]($member[albums])</a>".
  1700. "<a href=\"".ADMINSCRIPT."?action=share$hrefext\" class=\"act\">$lang[shares]($member[sharings])</a> <br>&nbsp;$lang[setting_styles_viewthread_userinfo_oltime]: $member[oltime]$lang[hourtime]");
  1701. showsetting('members_edit_password', 'passwordnew', '', 'text');
  1702. if(!empty($_G['setting']['connect']['allow']) && (!empty($member['conopenid']) || !empty($member['uinblack']))) {
  1703. if($member['conisbind'] && !$member['conisregister']) {
  1704. showsetting('members_edit_unbind', 'connectunbind', 0, 'radio');
  1705. }
  1706. showsetting('members_edit_uinblack', 'uinblack', $member['uinblack'], 'radio', '', 0, cplang('members_edit_uinblack_comment').($member['conisregister'] ? cplang('members_edit_uinblack_notice') : ''));
  1707. }
  1708. showsetting('members_edit_clearquestion', 'clearquestion', 0, 'radio');
  1709. showsetting('members_edit_status', 'statusnew', $member['status'], 'radio');
  1710. showsetting('members_edit_email', 'emailnew', $member['email'], 'text');
  1711. showsetting('members_edit_email_emailstatus', 'emailstatusnew', $member['emailstatus'], 'radio');
  1712. showsetting('members_edit_posts', 'postsnew', $member['posts'], 'text');
  1713. showsetting('members_edit_digestposts', 'digestpostsnew', $member['digestposts'], 'text');
  1714. showsetting('members_edit_regip', 'regipnew', $member['regip'], 'text');
  1715. showsetting('members_edit_regdate', 'regdatenew', $member['regdate'], 'text');
  1716. showsetting('members_edit_lastvisit', 'lastvisitnew', $member['lastvisit'], 'text');
  1717. showsetting('members_edit_lastip', 'lastipnew', $member['lastip'], 'text');
  1718. showsetting('members_edit_addsize', 'addsizenew', $member['addsize'], 'text');
  1719. showsetting('members_edit_addfriend', 'addfriendnew', $member['addfriend'], 'text');
  1720. showsetting('members_edit_timeoffset', 'timeoffsetnew', $member['timeoffset'], 'text');
  1721. showsetting('members_edit_invisible', 'invisiblenew', $member['invisible'], 'radio');
  1722. showtitle('members_edit_option');
  1723. showsetting('members_edit_cstatus', 'cstatusnew', $member['customstatus'], 'text');
  1724. showsetting('members_edit_signature', 'signaturenew', $member['signature'], 'textarea');
  1725. if($fields) {
  1726. showtitle('members_profile');
  1727. include_once libfile('function/profile');
  1728. foreach($fields as $fieldid=>$fieldtitle) {
  1729. $html = profile_setting($fieldid, $member);
  1730. if($html) {
  1731. showsetting($fieldtitle, '', '', $html);
  1732. }
  1733. }
  1734. }
  1735. showsubmit('editsubmit');
  1736. showtablefooter();
  1737. showformfooter();
  1738. } else {
  1739. loaducenter();
  1740. require_once libfile('function/discuzcode');
  1741. $questionid = $_GET['clearquestion'] ? 0 : '';
  1742. $ucresult = uc_user_edit(addslashes($member['username']), $_GET['passwordnew'], $_GET['passwordnew'], addslashes(strtolower(trim($_GET['emailnew']))), 1, $questionid);
  1743. if($ucresult < 0) {
  1744. if($ucresult == -4) {
  1745. cpmsg('members_email_illegal', '', 'error');
  1746. } elseif($ucresult == -5) {
  1747. cpmsg('members_email_domain_illegal', '', 'error');
  1748. } elseif($ucresult == -6) {
  1749. cpmsg('members_email_duplicate', '', 'error');
  1750. }
  1751. }
  1752. if($_GET['clearavatar']) {
  1753. C::t('common_member'.$tableext)->update($_GET['uid'], array('avatarstatus'=>0));
  1754. uc_user_deleteavatar($uid);
  1755. }
  1756. $creditsnew = intval($creditsnew);
  1757. $regdatenew = strtotime($_GET['regdatenew']);
  1758. $lastvisitnew = strtotime($_GET['lastvisitnew']);
  1759. $secquesadd = $_GET['clearquestion'] ? ", secques=''" : '';
  1760. $signaturenew = censor($_GET['signaturenew']);
  1761. $sigstatusnew = $signaturenew ? 1 : 0;
  1762. $sightmlnew = discuzcode($signaturenew, 1, 0, 0, 0, ($member['allowsigbbcode'] ? ($member['allowcusbbcode'] ? 2 : 1) : 0), $member['allowsigimgcode'], 0);
  1763. $oltimenew = round($_GET['totalnew'] / 60);
  1764. $fieldadd = '';
  1765. $fieldarr = array();
  1766. include_once libfile('function/profile');
  1767. foreach($_POST as $field_key=>$field_val) {
  1768. if(isset($fields[$field_key]) && (profile_check($field_key, $field_val) || $_G['adminid'] == 1)) {
  1769. $fieldarr[$field_key] = $field_val;
  1770. }
  1771. }
  1772. if($_GET['deletefile'] && is_array($_GET['deletefile'])) {
  1773. foreach($_GET['deletefile'] as $key => $value) {
  1774. if(isset($fields[$key]) && $_G['cache']['profilesetting'][$key]['formtype'] == 'file') {
  1775. @unlink(getglobal('setting/attachdir').'./profile/'.$member[$key]);
  1776. $fieldarr[$key] = '';
  1777. }
  1778. }
  1779. }
  1780. if($_FILES) {
  1781. $upload = new discuz_upload();
  1782. foreach($_FILES as $key => $file) {
  1783. if(isset($fields[$key])) {
  1784. $upload->init($file, 'profile');
  1785. $attach = $upload->attach;
  1786. if(!$upload->error()) {
  1787. $upload->save();
  1788. if(!$upload->get_image_info($attach['target'])) {
  1789. @unlink($attach['target']);
  1790. continue;
  1791. }
  1792. $attach['attachment'] = dhtmlspecialchars(trim($attach['attachment']));
  1793. @unlink(getglobal('setting/attachdir').'./profile/'.$member[$key]);
  1794. $fieldarr[$key] = $attach['attachment'];
  1795. }
  1796. }
  1797. }
  1798. }
  1799. $memberupdate = array();
  1800. if($ucresult >= 0) {
  1801. $memberupdate['email'] = strtolower(trim($_GET['emailnew']));
  1802. }
  1803. if($ucresult >= 0 && !empty($_GET['passwordnew'])) {
  1804. $memberupdate['password'] = md5(random(10));
  1805. }
  1806. $addsize = intval($_GET['addsizenew']);
  1807. $addfriend = intval($_GET['addfriendnew']);
  1808. $status = intval($_GET['statusnew']) ? -1 : 0;
  1809. $emailstatusnew = intval($_GET['emailstatusnew']);
  1810. if(!empty($_G['setting']['connect']['allow'])) {
  1811. if($member['uinblack'] && empty($_GET['uinblack'])) {
  1812. C::t('common_uin_black')->delete($member['uinblack']);
  1813. updatecache('connect_blacklist');
  1814. } elseif(!$member['uinblack'] && !empty($_GET['uinblack'])) {
  1815. connectunbind($member);
  1816. C::t('common_uin_black')->insert(array('uin' => $member['conopenid'], 'uid' => $uid, 'dateline' => TIMESTAMP), false, true);
  1817. updatecache('connect_blacklist');
  1818. }
  1819. if($member['conisbind'] && !$member['conisregister'] && !empty($_GET['connectunbind'])) {
  1820. connectunbind($member);
  1821. }
  1822. }
  1823. $memberupdate = array_merge($memberupdate, array('regdate'=>$regdatenew, 'emailstatus'=>$emailstatusnew, 'status'=>$status, 'timeoffset'=>$_GET['timeoffsetnew']));
  1824. C::t('common_member'.$tableext)->update($uid, $memberupdate);
  1825. C::t('common_member_field_home'.$tableext)->update($uid, array('addsize' => $addsize, 'addfriend' => $addfriend));
  1826. C::t('common_member_count'.$tableext)->update($uid, array('posts' => $_GET['postsnew'], 'digestposts' => $_GET['digestpostsnew']));
  1827. C::t('common_member_status'.$tableext)->update($uid, array('regip' => $_GET['regipnew'], 'lastvisit' => $lastvisitnew, 'lastip' => $_GET['lastipnew'], 'invisible' => $_GET['invisiblenew']));
  1828. C::t('common_member_field_forum'.$tableext)->update($uid, array('customstatus' => $_GET['cstatusnew'], 'sightml' => $sightmlnew));
  1829. if(!empty($fieldarr)) {
  1830. C::t('common_member_profile'.$tableext)->update($uid, $fieldarr);
  1831. }
  1832. manyoulog('user', $uid, 'update');
  1833. cpmsg('members_edit_succeed', 'action=members&operation=edit&uid='.$uid, 'succeed');
  1834. }
  1835. } elseif($operation == 'ipban') {
  1836. if(!$_GET['ipact']) {
  1837. if(!submitcheck('ipbansubmit')) {
  1838. require_once libfile('function/misc');
  1839. $iptoban = explode('.', getgpc('ip'));
  1840. $ipbanned = '';
  1841. foreach(C::t('common_banned')->fetch_all_order_dateline() as $banned) {
  1842. for($i = 1; $i <= 4; $i++) {
  1843. if($banned["ip$i"] == -1) {
  1844. $banned["ip$i"] = '*';
  1845. }
  1846. }
  1847. $disabled = $_G['adminid'] != 1 && $banned['admin'] != $_G['member']['username'] ? 'disabled' : '';
  1848. $banned['dateline'] = dgmdate($banned['dateline'], 'Y-m-d');
  1849. $banned['expiration'] = dgmdate($banned['expiration'], 'Y-m-d');
  1850. $theip = "$banned[ip1].$banned[ip2].$banned[ip3].$banned[ip4]";
  1851. $ipbanned .= showtablerow('', array('class="td25"'), array(
  1852. "<input class=\"checkbox\" type=\"checkbox\" name=\"delete[$banned[id]]\" value=\"$banned[id]\" $disabled />",
  1853. $theip,
  1854. convertip($theip, "./"),
  1855. $banned[admin],
  1856. $banned[dateline],
  1857. "<input type=\"text\" class=\"txt\" size=\"10\" name=\"expirationnew[$banned[id]]\" value=\"$banned[expiration]\" $disabled />"
  1858. ), TRUE);
  1859. }
  1860. shownav('user', 'nav_members_ipban');
  1861. showsubmenu('nav_members_ipban', array(
  1862. array('nav_members_ipban', 'members&operation=ipban', 1),
  1863. array('nav_members_ipban_output', 'members&operation=ipban&ipact=input', 0)
  1864. ));
  1865. showtips('members_ipban_tips');
  1866. showformheader('members&operation=ipban');
  1867. showtableheader();
  1868. showsubtitle(array('', 'ip', 'members_ipban_location', 'operator', 'start_time', 'end_time'));
  1869. echo $ipbanned;
  1870. showtablerow('', array('', 'class="td28" colspan="3"', 'class="td28" colspan="2"'), array(
  1871. $lang['add_new'],
  1872. '<input type="text" class="txt" name="ip1new" value="'.$iptoban[0].'" size="3" maxlength="3">.<input type="text" class="txt" name="ip2new" value="'.$iptoban[1].'" size="3" maxlength="3">.<input type="text" class="txt" name="ip3new" value="'.$iptoban[2].'" size="3" maxlength="3">.<input type="text" class="txt" name="ip4new" value="'.$iptoban[3].'" size="3" maxlength="3">',
  1873. $lang['validity'].': <input type="text" class="txt" name="validitynew" value="30" size="3"> '.$lang['days']
  1874. ));
  1875. showsubmit('ipbansubmit', 'submit', 'del');
  1876. showtablefooter();
  1877. showformfooter();
  1878. } else {
  1879. if(!empty($_GET['delete'])) {
  1880. C::t('common_banned')->delete_by_id($_GET['delete'], $_G['adminid'], $_G['username']);
  1881. }
  1882. if($_GET['ip1new'] != '' && $_GET['ip2new'] != '' && $_GET['ip3new'] != '' && $_GET['ip4new'] != '') {
  1883. $own = 0;
  1884. $ip = explode('.', $_G['clientip']);
  1885. for($i = 1; $i <= 4; $i++) {
  1886. if(!is_numeric($_GET['ip'.$i.'new']) || $_GET['ip'.$i.'new'] < 0) {
  1887. if($_G['adminid'] != 1) {
  1888. cpmsg('members_ipban_nopermission', '', 'error');
  1889. }
  1890. $_GET['ip'.$i.'new'] = -1;
  1891. $own++;
  1892. } elseif($_GET['ip'.$i.'new'] == $ip[$i - 1]) {
  1893. $own++;
  1894. }
  1895. $_GET['ip'.$i.'new'] = intval($_GET['ip'.$i.'new']);
  1896. }
  1897. if($own == 4) {
  1898. cpmsg('members_ipban_illegal', '', 'error');
  1899. }
  1900. foreach(C::t('common_banned')->fetch_all_order_dateline() as $banned) {
  1901. $exists = 0;
  1902. for($i = 1; $i <= 4; $i++) {
  1903. if($banned["ip$i"] == -1) {
  1904. $exists++;
  1905. } elseif($banned["ip$i"] == ${"ip".$i."new"}) {
  1906. $exists++;
  1907. }
  1908. }
  1909. if($exists == 4) {
  1910. cpmsg('members_ipban_invalid', '', 'error');
  1911. }
  1912. }
  1913. $expiration = TIMESTAMP + $_GET['validitynew'] * 86400;
  1914. C::app()->session->update_by_ipban($_GET['ip1new'], $_GET['ip2new'], $_GET['ip3new'], $_GET['ip4new']);
  1915. $data = array(
  1916. 'ip1' => $_GET['ip1new'],
  1917. 'ip2' => $_GET['ip2new'],
  1918. 'ip3' => $_GET['ip3new'],
  1919. 'ip4' => $_GET['ip4new'],
  1920. 'admin' => $_G['username'],
  1921. 'dateline' => $_G['timestamp'],
  1922. 'expiration' => $expiration,
  1923. );
  1924. C::t('common_banned')->insert($data);
  1925. captcha::report($_GET['ip1new'].'.'.$_GET['ip2new'].'.'.$_GET['ip3new'].'.'.$_GET['ip4new']);
  1926. }
  1927. if(is_array($_GET['expirationnew'])) {
  1928. foreach($_GET['expirationnew'] as $id => $expiration) {
  1929. C::t('common_banned')->update_expiration_by_id($id, strtotime($expiration), $_G['adminid'], $_G['username']);
  1930. }
  1931. }
  1932. updatecache('ipbanned');
  1933. cpmsg('members_ipban_succeed', 'action=members&operation=ipban', 'succeed');
  1934. }
  1935. } elseif($_GET['ipact'] == 'input') {
  1936. if($_G['adminid'] != 1) {
  1937. cpmsg('members_ipban_nopermission', '', 'error');
  1938. }
  1939. if(!submitcheck('ipbansubmit')) {
  1940. shownav('user', 'nav_members_ipban');
  1941. showsubmenu('nav_members_ipban', array(
  1942. array('nav_members_ipban', 'members&operation=ipban', 0),
  1943. array('nav_members_ipban_output', 'members&operation=ipban&ipact=input', 1)
  1944. ));
  1945. showtips('members_ipban_input_tips');
  1946. showformheader('members&operation=ipban&ipact=input');
  1947. showtableheader();
  1948. showsetting('members_ipban_input', 'inputipbanlist', '', 'textarea');
  1949. showsubmit('ipbansubmit', 'submit');
  1950. showtablefooter();
  1951. showformfooter();
  1952. } else {
  1953. $iplist = explode("\n", $_GET['inputipbanlist']);
  1954. foreach($iplist as $banip) {
  1955. if(strpos($banip, ',') !== false) {
  1956. list($banipaddr, $expiration) = explode(',', $banip);
  1957. $expiration = strtotime($expiration);
  1958. } else {
  1959. list($banipaddr, $expiration) = explode(';', $banip);
  1960. $expiration = TIMESTAMP + ($expiration ? $expiration : 30) * 86400;
  1961. }
  1962. if(!trim($banipaddr)) {
  1963. continue;
  1964. }
  1965. $ipnew = explode('.', $banipaddr);
  1966. for($i = 0; $i < 4; $i++) {
  1967. if(strpos($ipnew[$i], '*') !== false) {
  1968. $ipnew[$i] = -1;
  1969. } else {
  1970. $ipnew[$i] = intval($ipnew[$i]);
  1971. }
  1972. }
  1973. $checkexists = C::t('common_banned')->fetch_by_ip($ipnew[0], $ipnew[1], $ipnew[2], $ipnew[3]);
  1974. if($checkexists) {
  1975. continue;
  1976. }
  1977. C::app()->session->update_by_ipban($ipnew[0], $ipnew[1], $ipnew[2], $ipnew[3]);
  1978. $data = array(
  1979. 'ip1' => $ipnew[0],
  1980. 'ip2' => $ipnew[1],
  1981. 'ip3' => $ipnew[2],
  1982. 'ip4' => $ipnew[3],
  1983. 'admin' => $_G['username'],
  1984. 'dateline' => $_G['timestamp'],
  1985. 'expiration' => $expiration,
  1986. );
  1987. C::t('common_banned')->insert($data, false, true);
  1988. }
  1989. updatecache('ipbanned');
  1990. cpmsg('members_ipban_succeed', 'action=members&operation=ipban&ipact=input', 'succeed');
  1991. }
  1992. } elseif($_GET['ipact'] == 'output') {
  1993. ob_end_clean();
  1994. dheader('Cache-control: max-age=0');
  1995. dheader('Expires: '.gmdate('D, d M Y H:i:s', TIMESTAMP - 31536000).' GMT');
  1996. dheader('Content-Encoding: none');
  1997. dheader('Content-Disposition: attachment; filename=IPBan.csv');
  1998. dheader('Content-Type: text/plain');
  1999. foreach(C::t('common_banned')->fetch_all_order_dateline() as $banned) {
  2000. for($i = 1; $i <= 4; $i++) {
  2001. $banned['ip'.$i] = $banned['ip'.$i] < 0 ? '*' : $banned['ip'.$i];
  2002. }
  2003. $banned['expiration'] = dgmdate($banned['expiration']);
  2004. echo "$banned[ip1].$banned[ip2].$banned[ip3].$banned[ip4],$banned[expiration]\n";
  2005. }
  2006. define('FOOTERDISABLED' , 1);
  2007. exit();
  2008. }
  2009. } elseif($operation == 'profile') {
  2010. $fieldid = $_GET['fieldid'] ? $_GET['fieldid'] : '';
  2011. shownav('user', 'nav_members_profile');
  2012. if($fieldid) {
  2013. $_G['setting']['privacy'] = !empty($_G['setting']['privacy']) ? $_G['setting']['privacy'] : array();
  2014. $_G['setting']['privacy'] = is_array($_G['setting']['privacy']) ? $_G['setting']['privacy'] : dunserialize($_G['setting']['privacy']);
  2015. $field = C::t('common_member_profile_setting')->fetch($fieldid);
  2016. $fixedfields1 = array('uid', 'constellation', 'zodiac');
  2017. $fixedfields2 = array('gender', 'birthday', 'birthcity', 'residecity');
  2018. $field['isfixed1'] = in_array($fieldid, $fixedfields1);
  2019. $field['isfixed2'] = $field['isfixed1'] || in_array($fieldid, $fixedfields2);
  2020. $field['customable'] = preg_match('/^field[1-8]$/i', $fieldid);
  2021. $profilegroup = C::t('common_setting')->fetch('profilegroup', true);
  2022. $profilevalidate = array();
  2023. include libfile('spacecp/profilevalidate', 'include');
  2024. $field['validate'] = $field['validate'] ? $field['validate'] : ($profilevalidate[$fieldid] ? $profilevalidate[$fieldid] : '');
  2025. if(!submitcheck('editsubmit')) {
  2026. showsubmenu($lang['members_profile'].'-'.$field['title'], array(
  2027. array('members_profile_list', 'members&operation=profile', 0),
  2028. array($lang['edit'], 'members&operation=profile&fieldid='.$_GET['fieldid'], 1)
  2029. ));
  2030. showformheader('members&operation=profile&fieldid='.$fieldid);
  2031. showtableheader();
  2032. if($field['customable']) {
  2033. showsetting('members_profile_edit_name', 'title', $field['title'], 'text');
  2034. showsetting('members_profile_edit_desc', 'description', $field['description'], 'text');
  2035. } else {
  2036. showsetting('members_profile_edit_name', '', '', ' '.$field['title']);
  2037. showsetting('members_profile_edit_desc', '', '', ' '.$field['description']);
  2038. }
  2039. if(!$field['isfixed2']) {
  2040. if($field['fieldid'] == 'realname') {
  2041. showsetting('members_profile_edit_form_type', array('formtype', array(
  2042. array('text', $lang['members_profile_edit_text'], array('valuenumber' => '', 'fieldchoices' => 'none', 'fieldvalidate'=>''))
  2043. )), $field['formtype'], 'mradio');
  2044. } else {
  2045. showsetting('members_profile_edit_form_type', array('formtype', array(
  2046. array('text', $lang['members_profile_edit_text'], array('valuenumber' => '', 'fieldchoices' => 'none', 'fieldvalidate'=>'')),
  2047. array('textarea', $lang['members_profile_edit_textarea'], array('valuenumber' => '', 'fieldchoices' => 'none', 'fieldvalidate'=>'')),
  2048. array('radio', $lang['members_profile_edit_radio'], array('valuenumber' => 'none', 'fieldchoices' => '', 'fieldvalidate'=>'none')),
  2049. array('checkbox', $lang['members_profile_edit_checkbox'], array('valuenumber' => '', 'fieldchoices' => '', 'fieldvalidate'=>'none')),
  2050. array('select', $lang['members_profile_edit_select'], array('valuenumber' => 'none', 'fieldchoices' => '', 'fieldvalidate'=>'none')),
  2051. array('list', $lang['members_profile_edit_list'], array('valuenumber' => '', 'fieldchoices' => '')),
  2052. array('file', $lang['members_profile_edit_file'], array('valuenumber' => '', 'fieldchoices' => 'none', 'fieldvalidate'=>'none'))
  2053. )), $field['formtype'], 'mradio');
  2054. }
  2055. showtagheader('tbody', 'valuenumber', !in_array($field['formtype'], array('radio', 'select')), 'sub');
  2056. showsetting('members_profile_edit_value_number', 'size', $field['size'], 'text');
  2057. showtagfooter('tbody');
  2058. showtagheader('tbody', 'fieldchoices', !in_array($field['formtype'], array('file','text', 'textarea')), 'sub');
  2059. showsetting('members_profile_edit_choices', 'choices', $field['choices'], 'textarea');
  2060. showtagfooter('tbody');
  2061. showtagheader('tbody', 'fieldvalidate', in_array($field['formtype'], array('text', 'textarea')), 'sub');
  2062. showsetting('members_profile_edit_validate', 'validate', $field['validate'], 'text');
  2063. showtagfooter('tbody');
  2064. }
  2065. if(!$field['isfixed1']) {
  2066. showsetting('members_profile_edit_available', 'available', $field['available'], 'radio');
  2067. showsetting('members_profile_edit_unchangeable', 'unchangeable', $field['unchangeable'], 'radio');
  2068. showsetting('members_profile_edit_needverify', 'needverify', $field['needverify'], 'radio');
  2069. showsetting('members_profile_edit_required', 'required', $field['required'], 'radio');
  2070. }
  2071. showsetting('members_profile_edit_invisible', 'invisible', $field['invisible'], 'radio');
  2072. $privacyselect = array(
  2073. array('0', cplang('members_profile_edit_privacy_public')),
  2074. array('1', cplang('members_profile_edit_privacy_friend')),
  2075. array('3', cplang('members_profile_edit_privacy_secret'))
  2076. );
  2077. showsetting('members_profile_edit_default_privacy', array('privacy', $privacyselect), $_G['setting']['privacy']['profile'][$fieldid], 'select');
  2078. showsetting('members_profile_edit_showincard', 'showincard', $field['showincard'], 'radio');
  2079. showsetting('members_profile_edit_showinregister', 'showinregister', $field['showinregister'], 'radio');
  2080. showsetting('members_profile_edit_allowsearch', 'allowsearch', $field['allowsearch'], 'radio');
  2081. if(!empty($profilegroup)) {
  2082. $groupstr = '';
  2083. foreach($profilegroup as $key => $value) {
  2084. if($value['available']) {
  2085. if(in_array($fieldid, $value['field'])) {
  2086. $checked = ' checked="checked" ';
  2087. $class = ' class="checked" ';
  2088. } else {
  2089. $class = $checked = '';
  2090. }
  2091. $groupstr .= "<li $class style=\"float: left; width: 10%;\"><input type=\"checkbox\" value=\"$key\" name=\"profilegroup[$key]\" class=\"checkbox\" $checked>&nbsp;$value[title]</li>";
  2092. }
  2093. }
  2094. if(!empty($groupstr)) {
  2095. print <<<EOF
  2096. <tr>
  2097. <td class="td27" colspan="2">$lang[setting_profile_group]:</td>
  2098. </tr>
  2099. <tr>
  2100. <td colspan="2">
  2101. <ul class="dblist" onmouseover="altStyle(this);">
  2102. <li style="width: 100%;"><input type="checkbox" name="chkall" onclick="checkAll('prefix', this.form, 'profilegroup')" class="checkbox">&nbsp;$lang[select_all]</li>
  2103. $groupstr
  2104. </ul>
  2105. </td>
  2106. </tr>
  2107. EOF;
  2108. }
  2109. }
  2110. showsetting('members_profile_edit_display_order', 'displayorder', $field['displayorder'], 'text');
  2111. showsubmit('editsubmit');
  2112. showtablefooter();
  2113. showformfooter();
  2114. } else {
  2115. $setarr = array(
  2116. 'invisible' => intval($_POST['invisible']),
  2117. 'showincard' => intval($_POST['showincard']),
  2118. 'showinregister' => intval($_POST['showinregister']),
  2119. 'allowsearch' => intval($_POST['allowsearch']),
  2120. 'displayorder' => intval($_POST['displayorder'])
  2121. );
  2122. if($field['customable']) {
  2123. $_POST['title'] = dhtmlspecialchars(trim($_POST['title']));
  2124. if(empty($_POST['title'])) {
  2125. cpmsg('members_profile_edit_title_empty_error', 'action=members&operation=profile&fieldid='.$fieldid, 'error');
  2126. }
  2127. $setarr['title'] = $_POST['title'];
  2128. $setarr['description'] = dhtmlspecialchars(trim($_POST['description']));
  2129. }
  2130. if(!$field['isfixed1']) {
  2131. $setarr['required'] = intval($_POST['required']);
  2132. $setarr['available'] = intval($_POST['available']);
  2133. $setarr['unchangeable'] = intval($_POST['unchangeable']);
  2134. $setarr['needverify'] = intval($_POST['needverify']);
  2135. }
  2136. if(!$field['isfixed2']) {
  2137. $setarr['formtype'] = $fieldid == 'realname' ? 'text' : strtolower(trim($_POST['formtype']));
  2138. $setarr['size'] = intval($_POST['size']);
  2139. if($_POST['choices']) {
  2140. $_POST['choices'] = trim($_POST['choices']);
  2141. $ops = explode("\n", $_POST['choices']);
  2142. $parts = array();
  2143. foreach ($ops as $op) {
  2144. $parts[] = dhtmlspecialchars(trim($op));
  2145. }
  2146. $_POST['choices'] = implode("\n", $parts);
  2147. }
  2148. $setarr['choices'] = $_POST['choices'];
  2149. if($_POST['validate'] && $_POST['validate'] != $profilevalidate[$fieldid]) {
  2150. $setarr['validate'] = $_POST['validate'];
  2151. } elseif(empty($_POST['validate'])) {
  2152. $setarr['validate'] = '';
  2153. }
  2154. }
  2155. C::t('common_member_profile_setting')->update($fieldid, $setarr);
  2156. if($_GET['fieldid'] == 'birthday') {
  2157. C::t('common_member_profile_setting')->update('birthmonth', $setarr);
  2158. C::t('common_member_profile_setting')->update('birthyear', $setarr);
  2159. } elseif($_GET['fieldid'] == 'birthcity') {
  2160. C::t('common_member_profile_setting')->update('birthprovince', $setarr);
  2161. $setarr['required'] = 0;
  2162. C::t('common_member_profile_setting')->update('birthdist', $setarr);
  2163. C::t('common_member_profile_setting')->update('birthcommunity', $setarr);
  2164. } elseif($_GET['fieldid'] == 'residecity') {
  2165. C::t('common_member_profile_setting')->update('resideprovince', $setarr);
  2166. $setarr['required'] = 0;
  2167. C::t('common_member_profile_setting')->update('residedist', $setarr);
  2168. C::t('common_member_profile_setting')->update('residecommunity', $setarr);
  2169. } elseif($_GET['fieldid'] == 'idcard') {
  2170. C::t('common_member_profile_setting')->update('idcardtype', $setarr);
  2171. }
  2172. foreach($profilegroup as $type => $pgroup) {
  2173. if(is_array($_GET['profilegroup']) && in_array($type, $_GET['profilegroup'])) {
  2174. $profilegroup[$type]['field'][$fieldid] = $fieldid;
  2175. } else {
  2176. unset($profilegroup[$type]['field'][$fieldid]);
  2177. }
  2178. }
  2179. C::t('common_setting')->update('profilegroup', $profilegroup);
  2180. require_once libfile('function/cache');
  2181. if(!isset($_G['setting']['privacy']['profile']) || $_G['setting']['privacy']['profile'][$fieldid] != $_POST['privacy']) {
  2182. $_G['setting']['privacy']['profile'][$fieldid] = $_POST['privacy'];
  2183. C::t('common_setting')->update('privacy', $_G['setting']['privacy']);
  2184. }
  2185. updatecache(array('profilesetting','fields_required', 'fields_optional', 'fields_register', 'setting'));
  2186. include_once libfile('function/block');
  2187. loadcache('profilesetting', true);
  2188. blockclass_cache();
  2189. cpmsg('members_profile_edit_succeed', 'action=members&operation=profile', 'succeed');
  2190. }
  2191. } else {
  2192. $list = array();
  2193. foreach(C::t('common_member_profile_setting')->range() as $fieldid => $value) {
  2194. $list[$fieldid] = array(
  2195. 'title'=>$value['title'],
  2196. 'displayorder'=>$value['displayorder'],
  2197. 'available'=>$value['available'],
  2198. 'invisible'=>$value['invisible'],
  2199. 'showincard'=>$value['showincard'],
  2200. 'showinregister'=>$value['showinregister']);
  2201. }
  2202. unset($list['birthyear']);
  2203. unset($list['birthmonth']);
  2204. unset($list['birthprovince']);
  2205. unset($list['birthdist']);
  2206. unset($list['birthcommunity']);
  2207. unset($list['resideprovince']);
  2208. unset($list['residedist']);
  2209. unset($list['residecommunity']);
  2210. unset($list['idcardtype']);
  2211. if(!submitcheck('ordersubmit')) {
  2212. $_GET['anchor'] = in_array($_GET['action'], array('members', 'setting')) ? $_GET['action'] : 'members';
  2213. $current = array($_GET['anchor'] => 1);
  2214. $profilenav = array(
  2215. array('members_profile_list', 'members&operation=profile', $current['members']),
  2216. array('members_profile_group', 'setting&operation=profile', $current['setting']),
  2217. );
  2218. showsubmenu($lang['members_profile'], $profilenav);
  2219. showtips('members_profile_tips');
  2220. showformheader('members&operation=profile');
  2221. showtableheader('', '', 'id="profiletable_header"');
  2222. $tdstyle = array('class="td22"', 'class="td28" width="100"', 'class="td28" width="100"', 'class="td28" width="100"', 'class="td28" width="100"', 'class="td28"', 'class="td28"');
  2223. showsubtitle(array('members_profile_edit_name', 'members_profile_edit_display_order', 'members_profile_edit_available', 'members_profile_edit_profile_view', 'members_profile_edit_card_view', 'members_profile_edit_reg_view', ''), 'header tbm', $tdstyle);
  2224. showtablefooter();
  2225. echo '<script type="text/javascript">floatbottom(\'profiletable_header\');</script>';
  2226. showtableheader('members_profile', 'nobottom', 'id="porfiletable"');
  2227. showsubtitle(array('members_profile_edit_name', 'members_profile_edit_display_order', 'members_profile_edit_available', 'members_profile_edit_profile_view', 'members_profile_edit_card_view', 'members_profile_edit_reg_view', ''), 'header', $tdstyle);
  2228. foreach($list as $fieldid => $value) {
  2229. $value['available'] = '<input type="checkbox" class="checkbox" name="available['.$fieldid.']" '.($value['available'] ? 'checked="checked" ' : '').'value="1">';
  2230. $value['invisible'] = '<input type="checkbox" class="checkbox" name="invisible['.$fieldid.']" '.(!$value['invisible'] ? 'checked="checked" ' : '').'value="1">';
  2231. $value['showincard'] = '<input type="checkbox" class="checkbox" name="showincard['.$fieldid.']" '.($value['showincard'] ? 'checked="checked" ' : '').'value="1">';
  2232. $value['showinregister'] = '<input type="checkbox" class="checkbox" name="showinregister['.$fieldid.']" '.($value['showinregister'] ? 'checked="checked" ' : '').'value="1">';
  2233. $value['displayorder'] = '<input type="text" name="displayorder['.$fieldid.']" value="'.$value['displayorder'].'" size="5">';
  2234. $value['edit'] = '<a href="'.ADMINSCRIPT.'?action=members&operation=profile&fieldid='.$fieldid.'" title="" class="act">'.$lang[edit].'</a>';
  2235. showtablerow('', array(), $value);
  2236. }
  2237. showsubmit('ordersubmit');
  2238. showtablefooter();
  2239. showformfooter();
  2240. } else {
  2241. foreach($_GET['displayorder'] as $fieldid => $value) {
  2242. $setarr = array(
  2243. 'displayorder' => intval($value),
  2244. 'invisible' => intval($_GET['invisible'][$fieldid]) ? 0 : 1,
  2245. 'available' => intval($_GET['available'][$fieldid]),
  2246. 'showincard' => intval($_GET['showincard'][$fieldid]),
  2247. 'showinregister' => intval($_GET['showinregister'][$fieldid]),
  2248. );
  2249. C::t('common_member_profile_setting')->update($fieldid, $setarr);
  2250. if($fieldid == 'birthday') {
  2251. C::t('common_member_profile_setting')->update('birthmonth', $setarr);
  2252. C::t('common_member_profile_setting')->update('birthyear', $setarr);
  2253. } elseif($fieldid == 'birthcity') {
  2254. C::t('common_member_profile_setting')->update('birthprovince', $setarr);
  2255. $setarr['required'] = 0;
  2256. C::t('common_member_profile_setting')->update('birthdist', $setarr);
  2257. C::t('common_member_profile_setting')->update('birthcommunity', $setarr);
  2258. } elseif($fieldid == 'residecity') {
  2259. C::t('common_member_profile_setting')->update('resideprovince', $setarr);
  2260. $setarr['required'] = 0;
  2261. C::t('common_member_profile_setting')->update('residedist', $setarr);
  2262. C::t('common_member_profile_setting')->update('residecommunity', $setarr);
  2263. } elseif($fieldid == 'idcard') {
  2264. C::t('common_member_profile_setting')->update('idcardtype', $setarr);
  2265. }
  2266. }
  2267. require_once libfile('function/cache');
  2268. updatecache(array('profilesetting', 'fields_required', 'fields_optional', 'fields_register', 'setting'));
  2269. include_once libfile('function/block');
  2270. loadcache('profilesetting', true);
  2271. blockclass_cache();
  2272. cpmsg('members_profile_edit_succeed', 'action=members&operation=profile', 'succeed');
  2273. }
  2274. }
  2275. } elseif($operation == 'stat') {
  2276. if($_GET['do'] == 'stepstat' && $_GET['t'] > 0 && $_GET['i'] > 0) {
  2277. $t = intval($_GET['t']);
  2278. $i = intval($_GET['i']);
  2279. $o = $i - 1;
  2280. $value = C::t('common_member_stat_field')->fetch_all_by_fieldid($_GET['fieldid'], $o, 1);
  2281. if($value) {
  2282. $optionid = intval($value[0]['optionid']);
  2283. $fieldvalue = $value[0]['fieldvalue'];
  2284. } else {
  2285. $optionid = 0;
  2286. $fieldvalue = '';
  2287. }
  2288. $cnt = ($_GET['fieldid'] === 'groupid') ? C::t('common_member')->count_by_groupid($fieldvalue) : C::t('common_member_profile')->count_by_field($_GET['fieldid'], $fieldvalue);
  2289. C::t('common_member_stat_field')->update($optionid, array('users'=>$cnt, 'updatetime'=>TIMESTAMP));
  2290. if($i < $t) {
  2291. cpmsg('members_stat_do_stepstat', 'action=members&operation=stat&fieldid='.$_GET['fieldid'].'&do=stepstat&t='.$t.'&i='.($i+1), '', array('t'=>$t, 'i'=>$i));
  2292. } else {
  2293. cpmsg('members_stat_update_data_succeed', 'action=members&operation=stat&fieldid='.$_GET['fieldid'], 'succeed');
  2294. }
  2295. }
  2296. $options = array('groupid'=>cplang('usergroup'));
  2297. $fieldids = array('gender', 'birthyear', 'birthmonth', 'constellation', 'zodiac','birthprovince', 'resideprovince');
  2298. loadcache('profilesetting');
  2299. foreach($_G['cache']['profilesetting'] as $fieldid=>$value) {
  2300. if($value['formtype']=='select'||$value['formtype']=='radio'||in_array($fieldid,$fieldids)) {
  2301. $options[$fieldid] = $value['title'];
  2302. }
  2303. }
  2304. if(!empty($_GET['fieldid']) && !isset($options[$_GET['fieldid']])) {
  2305. cpmsg('members_stat_bad_fieldid', 'action=members&operation=stat', 'error');
  2306. }
  2307. if(!empty($_GET['fieldid']) && $_GET['fieldid'] == 'groupid') {
  2308. $usergroups = array();
  2309. foreach(C::t('common_usergroup')->range() as $value) {
  2310. $usergroups[$value['groupid']] = $value['grouptitle'];
  2311. }
  2312. }
  2313. if(!submitcheck('statsubmit')) {
  2314. shownav('user', 'nav_members_stat');
  2315. showsubmenu('nav_members_stat');
  2316. showtips('members_stat_tips');
  2317. showformheader('members&operation=stat&fieldid='.$_GET['fieldid']);
  2318. showtableheader('members_stat_options');
  2319. $option_html = '<ul>';
  2320. foreach($options as $key=>$value) {
  2321. $extra_style = $_GET['fieldid'] == $key ? ' font-weight: 900;' : '';
  2322. $option_html .= ""
  2323. ."<li style=\"float: left; width: 160px;$extra_style\">"
  2324. . "<a href=\"".ADMINSCRIPT."?action=members&operation=stat&fieldid=$key\">$value</a>"
  2325. . "</li>";
  2326. }
  2327. $option_html .= '</ul><br style="clear: both;" />';
  2328. showtablerow('', array('colspan="5"'), array($option_html));
  2329. if($_GET['fieldid']) {
  2330. $list = array();
  2331. $total = 0;
  2332. foreach(($list = C::t('common_member_stat_field')->fetch_all_by_fieldid($_GET['fieldid'])) as $value) {
  2333. $total += $value['users'];
  2334. }
  2335. for($i=0, $L=count($list); $i<$L; $i++) {
  2336. if($total) {
  2337. $list[$i]['percent'] = intval(10000 * $list[$i]['users'] / $total) / 100;
  2338. } else {
  2339. $list[$i]['percent'] = 0;
  2340. }
  2341. $list[$i]['width'] = $list[$i]['percent'] ? intval($list[$i]['percent'] * 2) : 1;
  2342. }
  2343. showtablerow('', array('colspan="4"'), array(cplang('members_stat_current_field').$options[$_GET['fieldid']].'; '.cplang('members_stat_members').$total));
  2344. showtablerow('', array('width="200"', '', 'width="160"', 'width="160"'),array(
  2345. cplang('members_stat_option'),
  2346. cplang('members_stat_view'),
  2347. cplang('members_stat_option_members'),
  2348. cplang('members_stat_updatetime')
  2349. ));
  2350. foreach($list as $value) {
  2351. if($_GET['fieldid']=='groupid') {
  2352. $value['fieldvalue'] = $usergroups[$value['fieldvalue']];
  2353. } elseif($_GET['fieldid']=='gender') {
  2354. $value['fieldvalue'] = lang('space', 'gender_'.$value['fieldvalue']);
  2355. } elseif(empty($value['fieldvalue'])) {
  2356. $value['fieldvalue'] = cplang('members_stat_null_fieldvalue');
  2357. }
  2358. showtablerow('', array('width="200"', '', 'width="160"', 'width="160"'),array(
  2359. $value['fieldvalue'],
  2360. '<div style="background-color: yellow; width: 200px; height: 20px;"><div style="background-color: red; height: 20px; width: '.$value['width'].'px;"></div></div>',
  2361. $value['users'].' ('.$value['percent'].'%)',
  2362. !empty($value['updatetime']) ? dgmdate($value['updatetime'], 'u') : 'N/A'
  2363. ));
  2364. }
  2365. showtablefooter();
  2366. $optype_html = '<input type="radio" class="radio" name="optype" id="optype_option" value="option" /><label for="optype_option">'.cplang('members_stat_update_option').'</label>&nbsp;&nbsp;'
  2367. .'<input type="radio" class="radio" name="optype" id="optype_data" value="data" /><label for="optype_data">'.cplang('members_stat_update_data').'</label>';
  2368. showsubmit('statsubmit', 'submit', $optype_html);
  2369. showformfooter();
  2370. } else {
  2371. showtablefooter();
  2372. showformfooter();
  2373. }
  2374. } else {
  2375. if($_POST['optype'] == 'option') {
  2376. $options = $inserts = $hits = $deletes = array();
  2377. foreach(C::t('common_member_stat_field')->fetch_all_by_fieldid($_GET['fieldid']) as $value) {
  2378. $options[$value['optionid']] = $value['fieldvalue'];
  2379. $hits[$value['optionid']] = false;
  2380. }
  2381. $alldata = $_GET['fieldid'] === 'groupid' ? C::t('common_member')->fetch_all_groupid() : C::t('common_member_profile')->fetch_all_field_value($_GET['fieldid']);
  2382. foreach($alldata as $value) {
  2383. $fieldvalue = $value[$_GET[fieldid]];
  2384. $optionid = array_search($fieldvalue, $options);
  2385. if($optionid) {
  2386. $hits[$optionid] = true;
  2387. } else {
  2388. $inserts[] = array('fieldid'=>$_GET['fieldid'], 'fieldvalue'=>$fieldvalue);
  2389. }
  2390. }
  2391. foreach ($hits as $key=>$value) {
  2392. if($value == false) {
  2393. $deletes[] = $key;
  2394. }
  2395. }
  2396. if($deletes) {
  2397. C::t('common_member_stat_field')->delete($deletes);
  2398. }
  2399. if($inserts) {
  2400. C::t('common_member_stat_field')->insert_batch($inserts);
  2401. }
  2402. cpmsg('members_stat_update_option_succeed', 'action=members&operation=stat&fieldid='.$_GET['fieldid'], 'succeed');
  2403. } elseif($_POST['optype'] == 'data') {
  2404. if(($t = C::t('common_member_stat_field')->count_by_fieldid($_GET['fieldid'])) > 0) {
  2405. cpmsg('members_stat_do_stepstat_prepared', 'action=members&operation=stat&fieldid='.$_GET['fieldid'].'&do=stepstat&t='.$t.'&i=1', '', array('t'=>$t));
  2406. } else {
  2407. cpmsg('members_stat_update_data_succeed', 'action=members&operation=stat&fieldid='.$_GET['fieldid'], 'succeed');
  2408. }
  2409. } else {
  2410. cpmsg('members_stat_null_operation', 'action=members&operation=stat', 'error');
  2411. }
  2412. }
  2413. }
  2414. function showsearchform($operation = '') {
  2415. global $_G, $lang;
  2416. $groupselect = array();
  2417. $usergroupid = isset($_GET['usergroupid']) && is_array($_GET['usergroupid']) ? $_GET['usergroupid'] : array();
  2418. $medals = isset($_GET['medalid']) && is_array($_GET['medalid']) ? $_GET['medalid'] : array();
  2419. $tagid = isset($_GET['tagid']) && is_array($_GET['tagid']) ? $_GET['tagid'] : array();
  2420. $query = C::t('common_usergroup')->fetch_all_not(array(6, 7), true);
  2421. foreach($query as $group) {
  2422. $group['type'] = $group['type'] == 'special' && $group['radminid'] ? 'specialadmin' : $group['type'];
  2423. $groupselect[$group['type']] .= "<option value=\"$group[groupid]\" ".(in_array($group['groupid'], $usergroupid) ? 'selected' : '').">$group[grouptitle]</option>\n";
  2424. }
  2425. $groupselect = '<optgroup label="'.$lang['usergroups_member'].'">'.$groupselect['member'].'</optgroup>'.
  2426. ($groupselect['special'] ? '<optgroup label="'.$lang['usergroups_special'].'">'.$groupselect['special'].'</optgroup>' : '').
  2427. ($groupselect['specialadmin'] ? '<optgroup label="'.$lang['usergroups_specialadmin'].'">'.$groupselect['specialadmin'].'</optgroup>' : '').
  2428. '<optgroup label="'.$lang['usergroups_system'].'">'.$groupselect['system'].'</optgroup>';
  2429. $medalselect = $usertagselect = '';
  2430. foreach(C::t('forum_medal')->fetch_all_data(1) as $medal) {
  2431. $medalselect .= "<option value=\"$medal[medalid]\" ".(in_array($medal['medalid'], $medals) ? 'selected' : '').">$medal[name]</option>\n";
  2432. }
  2433. $query = C::t('common_tag')->fetch_all_by_status(3);
  2434. foreach($query as $row) {
  2435. $usertagselect .= "<option value=\"$row[tagid]\" ".(in_array($row['tagid'], $tagid) ? 'selected' : '').">$row[tagname]</option>\n";
  2436. }
  2437. showtagheader('div', 'searchmembers', !$_GET['submit']);
  2438. echo '<script src="static/js/calendar.js" type="text/javascript"></script>';
  2439. echo '<style type="text/css">#residedistrictbox select, #birthdistrictbox select{width: auto;}</style>';
  2440. $formurl = "members&operation=$operation".($_GET['do'] == 'mobile' ? '&do=mobile' : '');
  2441. showformheader($formurl, "onSubmit=\"if($('updatecredittype1') && $('updatecredittype1').checked && !window.confirm('$lang[members_reward_clean_alarm]')){return false;} else {return true;}\"");
  2442. showtableheader();
  2443. if(isset($_G['setting']['membersplit'])) {
  2444. showsetting('members_search_table', '', '', '<select name="tablename" ><option value="master">'.$lang['members_search_table_master'].'</option><option value="archive">'.$lang['members_search_table_archive'].'</option></select>');
  2445. }
  2446. showsetting('members_search_user', 'username', $_GET['username'], 'text');
  2447. showsetting('members_search_uid', 'uid', $_GET['uid'], 'text');
  2448. showsetting('members_search_group', '', '', '<select name="groupid[]" multiple="multiple" size="10">'.$groupselect.'</select>');
  2449. showtablefooter();
  2450. showtableheader();
  2451. showtagheader('tbody', 'advanceoption');
  2452. $_G['showsetting_multirow'] = 1;
  2453. if(empty($medalselect)) {
  2454. $medalselect = '<option value="">'.cplang('members_search_nonemedal').'</option>';
  2455. }
  2456. if(empty($usertagselect)) {
  2457. $usertagselect = '<option value="">'.cplang('members_search_noneusertags').'</option>';
  2458. }
  2459. showsetting('members_search_medal', '', '', '<select name="medalid[]" multiple="multiple" size="10">'.$medalselect.'</select>');
  2460. showsetting('members_search_usertag', '', '', '<select name="tagid[]" multiple="multiple" size="10">'.$usertagselect.'</select>');
  2461. if(!empty($_G['setting']['connect']['allow'])) {
  2462. showsetting('members_search_conisbind', array('conisbind', array(
  2463. array(1, $lang['yes']),
  2464. array(0, $lang['no']),
  2465. ), 1), $_GET['conisbind'], 'mradio');
  2466. showsetting('members_search_uinblacklist', array('uin_low', array(
  2467. array(1, $lang['yes']),
  2468. array(0, $lang['no']),
  2469. ), 1), $_GET['uin_low'], 'mradio');
  2470. }
  2471. showsetting('members_search_online', array('sid_noempty', array(
  2472. array(1, $lang['yes']),
  2473. array(0, $lang['no']),
  2474. ), 1), $_GET['online'], 'mradio');
  2475. showsetting('members_search_lockstatus', array('status', array(
  2476. array(-1, $lang['yes']),
  2477. array(0, $lang['no']),
  2478. ), 1), $_GET['status'], 'mradio');
  2479. showsetting('members_search_freezestatus', array('freeze', array(
  2480. array(1, $lang['yes']),
  2481. array(0, $lang['no']),
  2482. ), 1), $_GET['freeze'], 'mradio');
  2483. showsetting('members_search_emailstatus', array('emailstatus', array(
  2484. array(1, $lang['yes']),
  2485. array(0, $lang['no']),
  2486. ), 1), $_GET['emailstatus'], 'mradio');
  2487. showsetting('members_search_avatarstatus', array('avatarstatus', array(
  2488. array(1, $lang['yes']),
  2489. array(0, $lang['no']),
  2490. ), 1), $_GET['avatarstatus'], 'mradio');
  2491. showsetting('members_search_email', 'email', $_GET['email'], 'text');
  2492. showsetting("$lang[credits] $lang[members_search_between]", array("credits_low", "credits_high"), array($_GET['credits_low'], $_GET['credtis_high']), 'range');
  2493. if(!empty($_G['setting']['extcredits'])) {
  2494. foreach($_G['setting']['extcredits'] as $id => $credit) {
  2495. showsetting("$credit[title] $lang[members_search_between]", array("extcredits$id"."_low", "extcredits$id"."_high"), array($_GET['extcredits'.$id.'_low'], $_GET['extcredits'.$id.'_high']), 'range');
  2496. }
  2497. }
  2498. showsetting('members_search_friendsrange', array('friends_low', 'friends_high'), array($_GET['friends_low'], $_GET['friends_high']), 'range');
  2499. showsetting('members_search_postsrange', array('posts_low', 'posts_high'), array($_GET['posts_low'], $_GET['posts_high']), 'range');
  2500. showsetting('members_search_regip', 'regip', $_GET['regip'], 'text');
  2501. showsetting('members_search_lastip', 'lastip', $_GET['lastip'], 'text');
  2502. showsetting('members_search_oltimerange', array('oltime_low', 'oltime_high'), array($_GET['oltime_low'], $_GET['oltime_high']), 'range');
  2503. showsetting('members_search_regdaterange', array('regdate_after', 'regdate_before'), array($_GET['regdate_after'], $_GET['regdate_before']), 'daterange');
  2504. showsetting('members_search_lastvisitrange', array('lastvisit_after', 'lastvisit_before'), array($_GET['lastvisit_after'], $_GET['lastvisit_before']), 'daterange');
  2505. showsetting('members_search_lastpostrange', array('lastpost_after', 'lastpost_before'), array($_GET['lastpost_after'], $_GET['lastpost_before']), 'daterange');
  2506. showsetting('members_search_group_fid', 'fid', $_GET['fid'], 'text');
  2507. if($_G['setting']['verify']) {
  2508. $verifydata = array();
  2509. foreach($_G['setting']['verify'] as $key => $value) {
  2510. if($value['available']) {
  2511. $verifydata[] = array('verify'.$key, $value['title']);
  2512. }
  2513. }
  2514. if(!empty($verifydata)) {
  2515. showsetting('members_search_verify', array('verify', $verifydata), $_GET['verify'], 'mcheckbox');
  2516. }
  2517. }
  2518. $yearselect = $monthselect = $dayselect = "<option value=\"\">".cplang('nolimit')."</option>\n";
  2519. $yy=dgmdate(TIMESTAMP, 'Y');
  2520. for($y=$yy; $y>=$yy-100; $y--) {
  2521. $y = sprintf("%04d", $y);
  2522. $yearselect .= "<option value=\"$y\" ".($_GET['birthyear'] == $y ? 'selected' : '').">$y</option>\n";
  2523. }
  2524. for($m=1; $m<=12; $m++) {
  2525. $m = sprintf("%02d", $m);
  2526. $monthselect .= "<option value=\"$m\" ".($_GET['birthmonth'] == $m ? 'selected' : '').">$m</option>\n";
  2527. }
  2528. for($d=1; $d<=31; $d++) {
  2529. $d = sprintf("%02d", $d);
  2530. $dayselect .= "<option value=\"$d\" ".($_GET['birthday'] == $d ? 'selected' : '').">$d</option>\n";
  2531. }
  2532. showsetting('members_search_birthday', '', '', '<select class="txt" name="birthyear" style="width:75px; margin-right:0">'.$yearselect.'</select> '.$lang['year'].' <select class="txt" name="birthmonth" style="width:75px; margin-right:0">'.$monthselect.'</select> '.$lang['month'].' <select class="txt" name="birthday" style="width:75px; margin-right:0">'.$dayselect.'</select> '.$lang['day']);
  2533. loadcache('profilesetting');
  2534. unset($_G['cache']['profilesetting']['uid']);
  2535. unset($_G['cache']['profilesetting']['birthyear']);
  2536. unset($_G['cache']['profilesetting']['birthmonth']);
  2537. unset($_G['cache']['profilesetting']['birthday']);
  2538. require_once libfile('function/profile');
  2539. foreach($_G['cache']['profilesetting'] as $fieldid=>$value) {
  2540. if(!$value['available'] || in_array($fieldid, array('birthprovince', 'birthdist', 'birthcommunity', 'resideprovince', 'residedist', 'residecommunity'))) {
  2541. continue;
  2542. }
  2543. if($fieldid == 'gender') {
  2544. $select = "<option value=\"\">".cplang('nolimit')."</option>\n";
  2545. $select .= "<option value=\"0\">".cplang('members_edit_gender_secret')."</option>\n";
  2546. $select .= "<option value=\"1\">".cplang('members_edit_gender_male')."</option>\n";
  2547. $select .= "<option value=\"2\">".cplang('members_edit_gender_female')."</option>\n";
  2548. showsetting($value['title'], '', '', '<select class="txt" name="gender">'.$select.'</select>');
  2549. } elseif($fieldid == 'birthcity') {
  2550. $elems = array('birthprovince', 'birthcity', 'birthdist', 'birthcommunity');
  2551. showsetting($value['title'], '', '', '<div id="birthdistrictbox">'.showdistrict(array(0,0,0,0), $elems, 'birthdistrictbox', 1, 'birth').'</div>');
  2552. } elseif($fieldid == 'residecity') {
  2553. $elems = array('resideprovince', 'residecity', 'residedist', 'residecommunity');
  2554. showsetting($value['title'], '', '', '<div id="residedistrictbox">'.showdistrict(array(0,0,0,0), $elems, 'residedistrictbox', 1, 'reside').'</div>');
  2555. } elseif($fieldid == 'constellation') {
  2556. $select = "<option value=\"\">".cplang('nolimit')."</option>\n";
  2557. for($i=1; $i<=12; $i++) {
  2558. $name = lang('space', 'constellation_'.$i);
  2559. $select .= "<option value=\"$name\">$name</option>\n";
  2560. }
  2561. showsetting($value['title'], '', '', '<select class="txt" name="constellation">'.$select.'</select>');
  2562. } elseif($fieldid == 'zodiac') {
  2563. $select = "<option value=\"\">".cplang('nolimit')."</option>\n";
  2564. for($i=1; $i<=12; $i++) {
  2565. $option = lang('space', 'zodiac_'.$i);
  2566. $select .= "<option value=\"$option\">$option</option>\n";
  2567. }
  2568. showsetting($value['title'], '', '', '<select class="txt" name="zodiac">'.$select.'</select>');
  2569. } elseif($value['formtype'] == 'select' || $value['formtype'] == 'list') {
  2570. $select = "<option value=\"\">".cplang('nolimit')."</option>\n";
  2571. $value['choices'] = explode("\n",$value['choices']);
  2572. foreach($value['choices'] as $option) {
  2573. $option = trim($option);
  2574. $select .= "<option value=\"$option\">$option</option>\n";
  2575. }
  2576. showsetting($value['title'], '', '', '<select class="txt" name="'.$fieldid.'">'.$select.'</select>');
  2577. } else {
  2578. showsetting($value['title'], '', '', '<input class="txt" name="'.$fieldid.'" />');
  2579. }
  2580. }
  2581. showtagfooter('tbody');
  2582. $_G['showsetting_multirow'] = 0;
  2583. showsubmit('submit', $operation == 'clean' ? 'members_delete' : 'search', '', 'more_options');
  2584. showtablefooter();
  2585. showformfooter();
  2586. showtagfooter('div');
  2587. }
  2588. function searchcondition($condition) {
  2589. include_once libfile('class/membersearch');
  2590. $ms = new membersearch();
  2591. return $ms->filtercondition($condition);
  2592. }
  2593. function searchmembers($condition, $limit=2000, $start=0) {
  2594. include_once libfile('class/membersearch');
  2595. $ms = new membersearch();
  2596. return $ms->search($condition, $limit, $start);
  2597. }
  2598. function countmembers($condition, &$urladd) {
  2599. $urladd = '';
  2600. foreach($condition as $k => $v) {
  2601. if(in_array($k, array('formhash', 'submit', 'page')) || $v === '') {
  2602. continue;
  2603. }
  2604. if(is_array($v)) {
  2605. foreach($v as $vk => $vv) {
  2606. if($vv === '') {
  2607. continue;
  2608. }
  2609. $urladd .= '&'.$k.'['.$vk.']='.rawurlencode($vv);
  2610. }
  2611. } else {
  2612. $urladd .= '&'.$k.'='.rawurlencode($v);
  2613. }
  2614. }
  2615. include_once libfile('class/membersearch');
  2616. $ms = new membersearch();
  2617. return $ms->getcount($condition);
  2618. }
  2619. function shownewsletter() {
  2620. global $lang;
  2621. showtableheader();
  2622. showsetting('members_newsletter_subject', 'subject', '', 'text');
  2623. showsetting('members_newsletter_message', 'message', '', 'textarea');
  2624. if($_GET['do'] == 'mobile') {
  2625. showsetting('members_newsletter_system', 'system', 0, 'radio');
  2626. showhiddenfields(array('notifymembers' => 'mobile'));
  2627. } else {
  2628. showsetting('members_newsletter_method', array('notifymembers', array(
  2629. array('email', $lang['email'], array('pmextra' => 'none', 'posttype' => '')),
  2630. array('notice', $lang['notice'], array('pmextra' => 'none', 'posttype' => '')),
  2631. array('pm', $lang['grouppm'], array('pmextra' => '', 'posttype' => 'none'))
  2632. )), 'pm', 'mradio');
  2633. showtagheader('tbody', 'posttype', '', 'sub');
  2634. showsetting('members_newsletter_posttype', array('posttype', array(
  2635. array(0, cplang('members_newsletter_posttype_text')),
  2636. array(1, cplang('members_newsletter_posttype_html')),
  2637. ), TRUE), '0', 'mradio');
  2638. showtagfooter('tbody');
  2639. showtagheader('tbody', 'pmextra', true, 'sub');
  2640. showsetting('members_newsletter_system', 'system', 0, 'radio');
  2641. showtagfooter('tbody');
  2642. }
  2643. showsetting('members_newsletter_num', 'pertask', 100, 'text');
  2644. showtablefooter();
  2645. }
  2646. function notifymembers($operation, $variable) {
  2647. global $_G, $lang, $urladd, $conditions, $search_condition;
  2648. if(!empty($_GET['current'])) {
  2649. $subject = $message = '';
  2650. if($settings = C::t('common_setting')->fetch($variable, true)) {
  2651. $subject = $settings['subject'];
  2652. $message = $settings['message'];
  2653. }
  2654. $setarr = array();
  2655. foreach($_G['setting']['extcredits'] as $id => $value) {
  2656. if(isset($_GET['extcredits'.$id])) {
  2657. if($_GET['updatecredittype'] == 0) {
  2658. $setarr['extcredits'.$id] = $_GET['extcredits'.$id];
  2659. } else {
  2660. $setarr[] = 'extcredits'.$id;
  2661. }
  2662. }
  2663. }
  2664. } else {
  2665. $current = 0;
  2666. $subject = $_GET['subject'];
  2667. $message = $_GET['message'];
  2668. $subject = dhtmlspecialchars(trim($subject));
  2669. $message = trim(str_replace("\t", ' ', $message));
  2670. $addmsg = '';
  2671. if(($_GET['notifymembers'] && $_GET['notifymember']) && !($subject && $message)) {
  2672. cpmsg('members_newsletter_sm_invalid', '', 'error');
  2673. }
  2674. if($operation == 'reward') {
  2675. $serarr = array();
  2676. if($_GET['updatecredittype'] == 0) {
  2677. if(is_array($_GET['addextcredits']) && !empty($_GET['addextcredits'])) {
  2678. foreach($_GET['addextcredits'] as $key => $value) {
  2679. $value = intval($value);
  2680. if(isset($_G['setting']['extcredits'][$key]) && !empty($value)) {
  2681. $setarr['extcredits'.$key] = $value;
  2682. $addmsg .= $_G['setting']['extcredits'][$key]['title'].": ".($value > 0 ? '<em class="xi1">+' : '<em class="xg1">')."$value</em> ".$_G['setting']['extcredits'][$key]['unit'].' &nbsp; ';
  2683. }
  2684. }
  2685. }
  2686. } else {
  2687. if(is_array($_GET['resetextcredits']) && !empty($_GET['resetextcredits'])) {
  2688. foreach($_GET['resetextcredits'] as $key => $value) {
  2689. $value = intval($value);
  2690. if(isset($_G['setting']['extcredits'][$key]) && !empty($value)) {
  2691. $setarr[] = 'extcredits'.$key;
  2692. $addmsg .= $_G['setting']['extcredits'][$key]['title'].': <em class="xg1">'.cplang('members_reward_clean').'</em> &nbsp; ';
  2693. }
  2694. }
  2695. }
  2696. }
  2697. if($addmsg) {
  2698. $addmsg = ' &nbsp; <br /><br /><b>'.cplang('members_reward_affect').':</b><br \>'.$addmsg;
  2699. }
  2700. if(!empty($setarr)) {
  2701. $limit = 2000;
  2702. set_time_limit(0);
  2703. $i = 0;
  2704. while(true) {
  2705. $uids = searchmembers($search_condition, $limit, $i*$limit);
  2706. $allcount = C::t('common_member_count')->fetch_all($uids);
  2707. $insertmember = array_diff($uids, array_keys($allcount));
  2708. foreach($insertmember as $uid) {
  2709. C::t('common_member_count')->insert(array('uid' => $uid));
  2710. }
  2711. if($_GET['updatecredittype'] == 0) {
  2712. C::t('common_member_count')->increase($uids, $setarr);
  2713. } else {
  2714. C::t('common_member_count')->clear_extcredits($uids, $setarr);
  2715. }
  2716. if(count($uids) < $limit) break;
  2717. $i++;
  2718. }
  2719. } else {
  2720. cpmsg('members_reward_invalid', '', 'error');
  2721. }
  2722. if(!$_GET['notifymembers']) {
  2723. cpmsg('members_reward_succeed', '', 'succeed');
  2724. }
  2725. } elseif ($operation == 'confermedal') {
  2726. $medals = $_GET['medals'];
  2727. if(!empty($medals)) {
  2728. $medalids = array();
  2729. foreach($medals as $key => $medalid) {
  2730. $medalids[] = $key;
  2731. }
  2732. $medalsnew = $comma = '';
  2733. $medalsnewarray = $medalidarray = array();
  2734. foreach(C::t('forum_medal')->fetch_all_by_id($medalids) as $medal) {
  2735. $medal['status'] = empty($medal['expiration']) ? 0 : 1;
  2736. $medal['expiration'] = empty($medal['expiration'])? 0 : TIMESTAMP + $medal['expiration'] * 86400;
  2737. $medal['medal'] = $medal['medalid'].(empty($medal['expiration']) ? '' : '|'.$medal['expiration']);
  2738. $medalsnew .= $comma.$medal['medal'];
  2739. $medalsnewarray[] = $medal;
  2740. $medalidarray[] = $medal['medalid'];
  2741. $comma = "\t";
  2742. }
  2743. $uids = searchmembers($search_condition);
  2744. if($uids) {
  2745. foreach(C::t('common_member_field_forum')->fetch_all($uids) as $uid => $medalnew) {
  2746. $usermedal = array();
  2747. $addmedalnew = '';
  2748. if(empty($medalnew['medals'])) {
  2749. $addmedalnew = $medalsnew;
  2750. } else {
  2751. foreach($medalidarray as $medalid) {
  2752. $usermedal_arr = explode("\t", $medalnew['medals']);
  2753. foreach($usermedal_arr AS $key => $medalval) {
  2754. list($usermedalid,) = explode("|", $medalval);
  2755. $usermedal[] = $usermedalid;
  2756. }
  2757. if(!in_array($medalid, $usermedal)){
  2758. $addmedalnew .= $medalid."\t";
  2759. }
  2760. }
  2761. $addmedalnew .= $medalnew['medals'];
  2762. }
  2763. C::t('common_member_field_forum')->update($medalnew['uid'], array('medals' => $addmedalnew), true);
  2764. foreach($medalsnewarray as $medalnewarray) {
  2765. $data = array(
  2766. 'uid' => $medalnew['uid'],
  2767. 'medalid' => $medalnewarray['medalid'],
  2768. 'type' => 0,
  2769. 'dateline' => $_G['timestamp'],
  2770. 'expiration' => $medalnewarray['expiration'],
  2771. 'status' => $medalnewarray['status'],
  2772. );
  2773. C::t('forum_medallog')->insert($data);
  2774. C::t('common_member_medal')->insert(array('uid' => $medalnew['uid'], 'medalid' => $medalnewarray['medalid']), 0, 1);
  2775. }
  2776. }
  2777. }
  2778. }
  2779. if(!$_GET['notifymember']) {
  2780. cpmsg('members_confermedal_succeed', '', 'succeed');
  2781. }
  2782. } elseif ($operation == 'confermagic') {
  2783. $magics = $_GET['magic'];
  2784. $magicnum = $_GET['magicnum'];
  2785. if($magics) {
  2786. require_once libfile('function/magic');
  2787. $limit = 200;
  2788. set_time_limit(0);
  2789. for($i=0; $i > -1; $i++) {
  2790. $uids = searchmembers($search_condition, $limit, $i*$limit);
  2791. foreach($magics as $magicid) {
  2792. $uparray = $insarray = array();
  2793. if(empty($magicnum[$magicid])) {
  2794. continue;
  2795. }
  2796. $query = C::t('common_member_magic')->fetch_all($uids ? $uids : -1, $magicid);
  2797. foreach($query as $row) {
  2798. $uparray[] = $row['uid'];
  2799. }
  2800. if($uparray) {
  2801. C::t('common_member_magic')->increase($uparray, $magicid, array('num' => $magicnum[$magicid]));
  2802. }
  2803. $insarray = array_diff($uids, $uparray);
  2804. if($insarray) {
  2805. $sqls = array();
  2806. foreach($insarray as $uid) {
  2807. C::t('common_member_magic')->insert(array(
  2808. 'uid' => $uid,
  2809. 'magicid' => $magicid,
  2810. 'num' => $magicnum[$magicid]
  2811. ));
  2812. }
  2813. }
  2814. foreach($uids as $uid) {
  2815. updatemagiclog($magicid, '3', $magicnum[$magicid], '', $uid);
  2816. }
  2817. }
  2818. if(count($uids) < $limit) break;
  2819. }
  2820. }
  2821. }
  2822. C::t('common_setting')->update($variable, array('subject' => $subject, 'message' => $message));
  2823. }
  2824. $pertask = intval($_GET['pertask']);
  2825. $current = $_GET['current'] ? intval($_GET['current']) : 0;
  2826. $continue = FALSE;
  2827. if(!function_exists('sendmail')) {
  2828. include libfile('function/mail');
  2829. }
  2830. if($_GET['notifymember'] && in_array($_GET['notifymembers'], array('pm', 'notice', 'email', 'mobile'))) {
  2831. $uids = searchmembers($search_condition, $pertask, $current);
  2832. require_once libfile('function/discuzcode');
  2833. $message = in_array($_GET['notifymembers'], array('email','notice')) && $_GET['posttype'] ? discuzcode($message, 1, 0, 1, '', '' ,'' ,1) : discuzcode($message, 1, 0);
  2834. $pmuids = array();
  2835. if($_GET['notifymembers'] == 'pm') {
  2836. $membernum = countmembers($search_condition, $urladd);
  2837. $gpmid = $_GET['gpmid'];
  2838. if(!$gpmid) {
  2839. $pmdata = array(
  2840. 'authorid' => $_G['uid'],
  2841. 'author' => !$_GET['system'] ? $_G['member']['username'] : '',
  2842. 'dateline' => TIMESTAMP,
  2843. 'message' => ($subject ? '<b>'.$subject.'</b><br /> &nbsp; ' : '').$message.$addmsg,
  2844. 'numbers' => $membernum
  2845. );
  2846. $gpmid = C::t('common_grouppm')->insert($pmdata, true);
  2847. }
  2848. $urladd .= '&gpmid='.$gpmid;
  2849. }
  2850. $members = C::t('common_member')->fetch_all($uids);
  2851. if($_GET['notifymembers'] == 'mobile') {
  2852. $toUids = array_keys($members);
  2853. if($_G['setting']['cloud_status'] && !empty($toUids)) {
  2854. try {
  2855. $noticeService = Cloud::loadClass('Service_Client_Notification');
  2856. $fromType = $_GET['system'] ? 1 : 2;
  2857. $noticeService->addSiteMasterUserNotify($toUids, $subject, $message, $_G['uid'], $_G['username'], $fromType, TIMESTAMP);
  2858. } catch (Cloud_Service_Client_RestfulException $e) {
  2859. cpmsg('['.$e->getCode().']'.$e->getMessage(), '', 'error');
  2860. }
  2861. }
  2862. } else {
  2863. foreach($members as $member) {
  2864. if($_GET['notifymembers'] == 'pm') {
  2865. C::t('common_member_grouppm')->insert(array(
  2866. 'uid' => $member['uid'],
  2867. 'gpmid' => $gpmid,
  2868. 'status' => 0
  2869. ), false, true);
  2870. $newpm = setstatus(2, 1, $member['newpm']);
  2871. C::t('common_member')->update($member['uid'], array('newpm'=>$newpm));
  2872. } elseif($_GET['notifymembers'] == 'notice') {
  2873. notification_add($member['uid'], 'system', 'system_notice', array('subject' => $subject, 'message' => $message.$addmsg, 'from_id' => 0, 'from_idtype' => 'sendnotice'), 1);
  2874. } elseif($_GET['notifymembers'] == 'email') {
  2875. if(!sendmail("$member[username] <$member[email]>", $subject, $message.$addmsg)) {
  2876. runlog('sendmail', "$member[email] sendmail failed.");
  2877. }
  2878. }
  2879. $log = array();
  2880. if($_GET['updatecredittype'] == 0) {
  2881. foreach($setarr as $key => $val) {
  2882. if(empty($val)) continue;
  2883. $val = intval($val);
  2884. $id = intval($key);
  2885. $id = !$id && substr($key, 0, -1) == 'extcredits' ? intval(substr($key, -1, 1)) : $id;
  2886. if(0 < $id && $id < 9) {
  2887. $log['extcredits'.$id] = $val;
  2888. }
  2889. }
  2890. $logtype = 'RPR';
  2891. } else {
  2892. foreach($setarr as $val) {
  2893. if(empty($val)) continue;
  2894. $id = intval($val);
  2895. $id = !$id && substr($val, 0, -1) == 'extcredits' ? intval(substr($val, -1, 1)) : $id;
  2896. if(0 < $id && $id < 9) {
  2897. $log['extcredits'.$id] = '-1';
  2898. }
  2899. }
  2900. $logtype = 'RPZ';
  2901. }
  2902. include_once libfile('function/credit');
  2903. credit_log($member['uid'], $logtype, $member['uid'], $log);
  2904. $continue = TRUE;
  2905. }
  2906. }
  2907. }
  2908. $newsletter_detail = array();
  2909. if($continue) {
  2910. $next = $current + $pertask;
  2911. $newsletter_detail = array(
  2912. 'uid' => $_G['uid'],
  2913. 'current' => $current,
  2914. 'next' => $next,
  2915. 'search_condition' => serialize($search_condition),
  2916. 'action' => "action=members&operation=$operation&{$operation}submit=yes&current=$next&pertask=$pertask&system={$_GET['system']}&posttype={$_GET['posttype']}&notifymember={$_GET['notifymember']}&notifymembers=".rawurlencode($_GET['notifymembers']).$urladd
  2917. );
  2918. save_newsletter('newsletter_detail', $newsletter_detail);
  2919. $logaddurl = '';
  2920. foreach($setarr as $k => $v) {
  2921. if($_GET['updatecredittype'] == 0) {
  2922. $logaddurl .= '&'.$k.'='.$v;
  2923. } else {
  2924. $logaddurl .= '&'.$v.'=-1';
  2925. }
  2926. }
  2927. $logaddurl .= '&updatecredittype='.$_GET['updatecredittype'];
  2928. cpmsg("$lang[members_newsletter_send]: ".cplang('members_newsletter_processing', array('current' => $current, 'next' => $next, 'search_condition' => serialize($search_condition))), "action=members&operation=$operation&{$operation}submit=yes&current=$next&pertask=$pertask&system={$_GET['system']}&posttype={$_GET['posttype']}&notifymember={$_GET['notifymember']}&notifymembers=".rawurlencode($_GET['notifymembers']).$urladd.$logaddurl, 'loadingform');
  2929. } else {
  2930. del_newsletter('newsletter_detail');
  2931. if($operation == 'reward' && $_GET['notifymembers'] == 'pm') {
  2932. $message = '';
  2933. } else {
  2934. $message = '_notify';
  2935. }
  2936. cpmsg('members'.($operation ? '_'.$operation : '').$message.'_succeed', '', 'succeed');
  2937. }
  2938. }
  2939. function banlog($username, $origgroupid, $newgroupid, $expiration, $reason, $status = 0) {
  2940. global $_G, $_POST;
  2941. $cloud_apps = dunserialize($_G['setting']['cloud_apps']);
  2942. if (isset($_POST['bannew']) && $_POST['formhash'] && $cloud_apps['security']['status'] == 'normal') {
  2943. $securityService = Cloud::loadClass('Service_Security');
  2944. if ($_POST['bannew']) {
  2945. $securityService->logBannedMember($username, $reason);
  2946. } else {
  2947. $securityService->updateMemberRecover($username);
  2948. }
  2949. }
  2950. writelog('banlog', dhtmlspecialchars("$_G[timestamp]\t{$_G[member][username]}\t$_G[groupid]\t$_G[clientip]\t$username\t$origgroupid\t$newgroupid\t$expiration\t$reason\t$status"));
  2951. }
  2952. function selectday($varname, $dayarray) {
  2953. global $lang;
  2954. $selectday = '<select name="'.$varname.'">';
  2955. if($dayarray && is_array($dayarray)) {
  2956. foreach($dayarray as $day) {
  2957. $langday = $day.'_day';
  2958. $daydate = $day ? '('.dgmdate(TIMESTAMP + $day * 86400).')' : '';
  2959. $selectday .= '<option value='.$day.'>'.$lang[$langday].'&nbsp;'.$daydate.'</option>';
  2960. }
  2961. }
  2962. $selectday .= '</select>';
  2963. return $selectday;
  2964. }
  2965. function accessimg($access) {
  2966. return $access == -1 ? '<img src="static/image/common/access_disallow.gif" />' :
  2967. ($access == 1 ? '<img src="static/image/common/access_allow.gif" />' : '<img src="static/image/common/access_normal.gif" />');
  2968. }
  2969. function connectunbind($member) {
  2970. global $_G;
  2971. if(!$member['conopenid']) {
  2972. return;
  2973. }
  2974. $_G['member'] = array_merge($_G['member'], $member);
  2975. C::t('#qqconnect#connect_memberbindlog')->insert(array('uid' => $member['uid'], 'uin' => $member['conopenid'], 'type' => '2', 'dateline' => $_G['timestamp']));
  2976. C::t('common_member')->update($member['uid'], array('conisbind'=>0));
  2977. C::t('#qqconnect#common_member_connect')->delete($member['uid']);
  2978. }
  2979. function save_newsletter($cachename, $data) {
  2980. C::t('common_cache')->insert(array('cachekey' => $cachename, 'cachevalue' => serialize($data), 'dateline' => TIMESTAMP), false, true);
  2981. }
  2982. function del_newsletter($cachename) {
  2983. C::t('common_cache')->delete($cachename);
  2984. }
  2985. function get_newsletter($cachename) {
  2986. foreach(C::t('common_cache')->fetch_all($cachename) as $result) {
  2987. $data = $result['cachevalue'];
  2988. }
  2989. return $data;
  2990. }
  2991. ?>