123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708 |
- <?php
- namespace App\Http\Controllers\Api;
- use App\Jobs\CalculateFollowsNumJob;
- use App\Jobs\CalculateLikesNumJob;
- use App\Jobs\Circle\ForgetCircleUnreadCountJob;
- use App\Jobs\CreatePostSyncJob;
- use App\Jobs\ImitateCircleJoinStepJob;
- use App\Jobs\Posts\UpdatePosterGlassJob;
- use App\Jobs\Posts\UpdatePostFieldsJob;
- use App\Jobs\Posts\UpdatePostFilesIdJob;
- use App\Jobs\Posts\UpdatePostGoodsIdJob;
- use App\Jobs\Posts\UpdatePostOnlyTextJob;
- use App\Jobs\Posts\UpdatePostSoundsIdJob;
- use App\Jobs\Posts\UpdatePostTagIdJob;
- use App\Jobs\Posts\UpdatePostVideoIdJob;
- use App\Jobs\TopicImgJob;
- use App\Jobs\UpdateCommentCircleJob;
- use App\Jobs\UserInputSafeCheckJob;
- use App\Jobs\UserPublishedFollowJob;
- use App\Jobs\VideoSnapshotJob;
- use App\Lib\WeApp\WeApp;
- use App\Models\Posts\WxPost;
- use App\Models\Posts\WxPostsAddress;
- use App\Models\Posts\WxPostsField;
- use App\Models\Posts\WxPostsFile;
- use App\Models\Posts\WxPostsGoods;
- use App\Models\Posts\WxPostsImg;
- use App\Models\Posts\WxPostsSound;
- use App\Models\Posts\WxPostsVote;
- use App\Models\Posts\WxPostsWeightRefresh;
- use App\Models\Posts\WxTag;
- use App\Models\Circle\WxCircle;
- use App\Models\Posts\WxPostsPayContent;
- use App\Models\Posts\WxUserCircle;
- use App\Models\Shop\WxShopGoods;
- use App\Models\Used\WxUsedGood;
- use App\Models\Used\WxUsedNeed;
- use App\Models\User\WxUser;
- use App\Models\User\WxUserPay;
- use App\Models\User\WxUserStudentCertify;
- use App\Models\Voter\WxVoter;
- use App\Models\WxTenant;
- use App\Wen\Utils\BaiduUtils;
- use App\Wen\Utils\CircleUtils;
- use App\Wen\Utils\FieldUtils;
- use App\Wen\Utils\FileUtils;
- use App\Wen\Utils\GatewayUtils;
- use App\Wen\Utils\ImageUtils;
- use App\Wen\Utils\PostUtils;
- use App\Wen\Utils\SearchUtils;
- use App\Wen\Utils\Settings;
- use App\Wen\Utils\StrUtils;
- use App\Wen\Utils\UserUtils;
- use App\Wen\Utils\Utils;
- use App\Http\Controllers\Api\Repositories\PostsRepositores;
- use App\Http\Controllers\Api\Repositories\WxCircleRepositores;
- use App\Http\Controllers\Api\Repositories\WxCommentRepositores;
- use App\Http\Controllers\Api\Repositories\WxPlateRepositores;
- use App\Http\Controllers\Api\Repositories\WxTagsRepositories;
- use App\Http\Controllers\Api\Repositories\WxUserRepositores;
- use App\Http\Requests\Api\PostsRequests\CircleRequest;
- use App\Models\Posts\WxPost as Model;
- use App\Models\Posts\WxPostsTag;
- use App\Models\Posts\WxPostsVideo;
- use App\Models\WxExceptional;
- use Illuminate\Http\JsonResponse;
- use Illuminate\Http\Request;
- use Illuminate\Support\Carbon;
- use Illuminate\Support\Facades\Cache;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Redis;
- use Intervention\Image\Facades\Image;
- use SimpleSoftwareIO\QrCode\Facades\QrCode;
- class PostsController extends BaseController
- {
- /**
- * 板块选择
- */
- public function plateOptions()
- {
- $data = (new WxPlateRepositores())->options();
- return $this->success($data);
- }
- /**
- * 板块列表
- * @return \Illuminate\Http\JsonResponse
- */
- public function plateList()
- {
- return $this->success(WxPlateRepositores::list());
- }
- /**
- * 通过板块ID获取圈子列表
- * @param CircleRequest $request
- */
- public function getCircleByPlateId(CircleRequest $request)
- {
- $plateId = $request->plate_id;
- $uid = $request->uid;
- if($uid > 0){
- }else{
- $uid = 0;
- }
- $data = WxCircleRepositores::circleByPlateId($plateId, $uid);
- if($data){
- return $this->success($data);
- }else{
- return $this->fail(200003, [], '该分区没有'.env('circle_call', '圈子'));
- }
- }
- /**
- * 搜索圈子
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function searchCircle(Request $request)
- {
- $keyword = $request->keyword;
- return $this->success(WxCircleRepositores::searchCircle($keyword));
- }
- /**
- * 发帖时推荐的话题
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function recommendTags(Request $request)
- {
- $search = $request->search;
- if($search){
- $result = WxTag::where('tags_state', 0)->where('tags_name', 'like', $search.'%')->limit(20)->get()->map(function ($items) {
- $items->tags_number = WxPostsTag::where('tags_id', $items->id)->count();
- if(_empty_($items->head_portrait)){
- $items->head_portrait = Settings::get('img_default_topic_avatar');
- TopicImgJob::dispatch($items->id);
- }
- return $items;
- });
- return $this->success($result);
- }else{
- return $this->success(WxTagsRepositories::recommendTags());
- }
- }
- /**
- * 购买付费内容
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function pay(Request $request){
- $uid = $request->uid;
- $post_id = $request->post_id;
- $scene = $request->scene;
- if(_empty_($post_id) || _empty_($scene)){
- return $this->fail(200001);
- }
- $post_obj = WxPost::where('id', $post_id)->first(['user_id','pay_content_id', 'circle_id']);
- if(_empty_($post_obj)){
- return $this->fail(200003);
- }
- $post_user_id = $post_obj->user_id;
- $pay_content_id = $post_obj->pay_content_id;
- $circle_id = $post_obj->circle_id;
- if(_empty_($pay_content_id)){
- return $this->fail(200004);
- }
- if($uid == $post_user_id){
- return $this->fail(200038);
- }
- if(WxUserPay::where([
- ['user_id', '=', $uid],
- ['post_id', '=', $post_id],
- ['pay_content_id', '=', $pay_content_id]
- ])->exists()){
- return $this->fail(200035);
- }
- $pay_content_obj = WxPostsPayContent::find($pay_content_id);
- if(_empty_($pay_content_obj)){
- return $this->fail(200003);
- }
- try{
- DB::beginTransaction();
- $price = $pay_content_obj->price;
- $credit_type = $pay_content_obj->credit_type;
- $user = WxUser::find($uid);
- $user_name = $user->user_name;
- $is_vip = $user->is_member;
- $vip_discount = _between_(Settings::get('app_vip_paycontent_discount', 0), 0, 100);
- $vip_price_tip = '';
- if($vip_discount > 0 && $is_vip){
- if($credit_type == 0){
- $vip_price = (int)($price * ( (100 - $vip_discount) / 100));
- }else{
- $vip_price = round($price * ( (100 - $vip_discount) / 100), 2);
- }
- $vip_price_tip = '会员价';
- }else{
- $vip_price = $price;
- }
- if($credit_type == 0){
- $coins = UserUtils::user_coins($uid);
- if($coins < $vip_price){
- DB::rollBack();
- return $this->fail(200011);
- }
- $circle_user_reward = 0;
- $paycontent_division = 0;
- if($circle_id && $circle_id > 0){
- $circle_info = WxCircle::find($circle_id);
- $paycontent_division = $circle_info->circle_user_paycontent_division;
- $circle_user_id = $circle_info->user_id;
- $circle_user_reward = (int)($paycontent_division * $price);
- }
- $platform_division = _between_(Settings::get('app_paypost_platform_percent', 0), 0, 100);
- $platform_reward = (int)($platform_division * $price / 100);
- if($vip_price > 0){
- $r = UserUtils::update_user_coins($uid,1, -$vip_price, $vip_price_tip.'购买付费内容:'.Settings::get('app_coin_name', '硬币').'-'.$vip_price);
- }else{
- $r = true;
- }
- if($r){
- if($circle_user_reward > 0 || $platform_reward > 0){
- $author_reward = $price - $circle_user_reward - $platform_reward;
- if($author_reward > 0){
- $content_tip = '「<a href="/pages/user/user?id='.$uid.'">'.$user_name.'</a>」购买了您的付费内容(id:<a href="/pages/sticky/sticky?id='.$post_id.'">'.$post_id.'</a>),获得'.Settings::get('app_coin_name', '硬币').'+'.$author_reward.'('.env('circle_user_call', '圈主').'分成'.$circle_user_reward.Settings::get('app_coin_name', '硬币').',系统分成'.$platform_reward.Settings::get('app_coin_name', '硬币').')';
- UserUtils::update_user_coins($post_user_id,2, $author_reward, '付费内容被购买('.env('circle_user_call', '圈主').'分成'.($paycontent_division * 100).'%):'.Settings::get('app_coin_name', '硬币').'+'.$author_reward);
- UserUtils::add_user_notice(7003, $post_user_id,
- Settings::get('app_coin_name', '硬币').'到账', $content_tip
- , 100, $post_id);
- }
- if($circle_user_reward > 0){
- UserUtils::update_user_coins($circle_user_id,15, $circle_user_reward, env('circle_user_call', '圈主').'分成奖励:'.Settings::get('app_coin_name', '硬币').'+'.$circle_user_reward);
- UserUtils::add_user_notice(7004, $circle_user_id, env('circle_user_call', '圈主').'分成奖励', env('circle_call', '圈子').'成员的付费内容被购买,订单金额'.$price.'金币,您获得分成'.$circle_user_reward.'金币(分成比例:'.($paycontent_division * 100).'%)', 100);
- }
- }else{
- UserUtils::update_user_coins($post_user_id,2, $price, '付费内容被购买:'.Settings::get('app_coin_name', '硬币').'+'.$price);
- UserUtils::add_user_notice(7003, $post_user_id, Settings::get('app_coin_name', '硬币').'到账','「<a href="/pages/user/user?id='.$uid.'">'.$user_name.'</a>」购买了您的付费内容(id:<a href="/pages/sticky/sticky?id='.$post_id.'">'.$post_id.'</a>),获得金币+'.$price, 100, $post_id);
- }
- $user_pay = new WxUserPay();
- $user_pay->user_id = $uid;
- $user_pay->post_id = $post_id;
- $user_pay->pay_content_id = $pay_content_id;
- $user_pay->save();
- WxCommentRepositores::add($post_id, 0, 0, $uid, '💰'.$vip_price_tip.'购买了付费内容', '', 1);
- // 返回刷新内容
- $data = WxPost::where('id', $post_id)->get();
- $data = PostsRepositores::postsParame($data, $uid, $scene);
- DB::commit();
- return $this->success($data);
- }
- DB::rollBack();
- return $this->fail(200037);
- }else if($credit_type == 1){
- DB::rollBack();
- return $this->fail(200004, [], '该接口仅能购买'.Settings::get('app_coin_name', '硬币').'付费内容');
- }
- }catch (\Exception $e){
- DB::rollBack();
- _logger_(__file__, __line__, $e->getMessage());
- return $this->fail(200037);
- }
- }
- /**
- * 添加话题
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function addTag(Request $request)
- {
- $tags_name = $request->tags_name;
- $uid = $request->uid;
- _limit_user('add:tag', $uid, 16);
- if(mb_strlen($tags_name) > 20){
- return $this->fail(200018);
- }
- // 百度审核
- $need_manual_review = true;
- $is_audit_create_tag = Settings::get('is_audit_create_tag', 0);
- if ($is_audit_create_tag == 2) {
- $filter_result = BaiduUtils::text_filter($tags_name);
- if($filter_result){
- if($filter_result['hit_level'] == 2){
- // 不合规
- return $this->fail(200016, ['tip'=>$filter_result['tip_list'], 'hit_word'=>$filter_result['hit_word']]);
- }else if($filter_result['hit_level'] == 0){
- // 审核通过
- $need_manual_review = false;
- }
- }
- }else if($is_audit_create_tag == 0){
- $need_manual_review = true;
- }else{
- $need_manual_review = false;
- }
- // (0正常,1管理员隐藏)
- $tags_state = 0;
- if($need_manual_review){
- $tags_state = 1;
- }
- UserInputSafeCheckJob::dispatch($uid, $tags_name);
- $res = WxTagsRepositories::add($uid, $tags_name, $tags_state);
- return $this->success($res);
- }
- private function updatePost(Request &$request){
- $uid = $request->uid;
- $posts_id = _abs($request->posts_id);
- global $__MINI_GLOBAL_IP__,$__MINI_GLOBAL_TENANT_ID__;
- if(_empty_($posts_id)){
- return $this->fail(200001);
- }
- $the_post = WxPost::find($posts_id);
- if(_empty_($the_post)){
- return $this->fail(200003);
- }
- $is_admin = is_object_user_special($uid, $the_post->tenant_id);
- // 权限验证
- if(!$is_admin && !PostUtils::is_post_author($posts_id, $uid)){
- return $this->fail(200000);
- }
- if(!UserUtils::is_user_can_speak($uid)){
- return $this->fail(200043, [
- 'title' => '禁言中,无法言论',
- 'content' => '是否前往解除限制',
- 'confirmText' => '去解除',
- 'target_type' => 6,
- 'target_id' => '/pagesA/mine/unlock/unlock?user_id='.$uid
- ], '您当前处于禁言期间,无法言论');
- }
- $the_post = WxPost::find($posts_id);
- $post_author_id = $the_post->user_id;
- if($the_post->refer_id > 0 || $the_post->vote_id > 0){
- if($the_post->refer_id > 0){
- return $this->fail(200000, [], '转发笔记不能编辑');
- }
- if($the_post->vote_id > 0){
- return $this->fail(200000, [], '投票笔记不能编辑');
- }
- }
- $edit_need_coin = Settings::get('app_publish_edit_need_coin', ($__MINI_GLOBAL_TENANT_ID__ > 0 ? Settings::get('app_publish_edit_need_coin', 100) : 100), true);
- if($edit_need_coin > 0){
- // 判断金币是否足够
- if($post_author_id == $uid){
- if(UserUtils::user_coins($post_author_id) < $edit_need_coin){
- return $this->fail(200011, []);
- }
- }
- }
- $contents_all = $request->posts_content;
- $contents = trim($request->posts_content);
-
- $circle_id = $request->circle_id;
- if(_empty_($circle_id)){
- $circle_id = null;
- }
- $refer_id = $request->refer_id;
- $voter_id = _empty_default_($request->voter_id, 0);
- $editer = $request->editer ?? 'simple';
- $posts_title = _empty_default_($request->posts_title, '');
- $imagetext_content = trim($request->imagetext_content) ?? '';
- $image_state_change_list = [];
- // [["id" => 74,"tags_name" => "啦啦啦啦"],]
- $tags = $request->tags;
- // [ ["id" => 1045,"name" => "爬宠饲养盒","pic" => "url"], ]
- $goods = $request->goods;
- // [
- // "latitude" => 32.45217
- // "longitude" => 118.43575
- // "address_name" => "安徽省滁州市来安县东大街9号"
- // "address_detailed" => "来安县新安镇永阳社区综治中心(白云商厦东北)"
- // ]
- $address = $request->address;
- // [ ["url" => "url"], ]
- $image_urls = $request->image_urls;
- // null || video_url
- $video_urls = $request->video_url;
- // null || img_url
- $photo_url = $request->photo_url;
- $is_draft = _empty_default_($request->is_draft, 0);
- $videoThumbUrl = Utils::isImgUrl($request->video_thumb_url) ? $request->video_thumb_url : '';
- // 0 || 1080
- $video_width = $request->video_width;
- // 0 || 1080
- $video_height = $request->video_height;
- $useds = _empty_default_($request->useds, []);
- $bureaus = _empty_default_($request->bureaus, []);
- $sph_obj = null;
- $votes = [];
- $file_list = $request->file_list;
- $sounds_list = $request->sounds_list;
- $contact_phone = $request->contact_phone;
- $pay_obj = $request->pay_obj;
- $is_anonymous = _empty_default_($request->is_anonymous, 0) == 1 ? 1 : 0;
- $check_res = $this->checkPost($editer, $is_only_text, $request, $image_state_change_list, $posts_title, $contents, $imagetext_content,$image_urls,$video_urls, $videoThumbUrl,
- $refer_id, $useds, $bureaus, $votes, $sph_obj, $file_list, $sounds_list, $contact_phone, $pay_obj, $voter_id);
- if ($check_res instanceof JsonResponse) {
- return $check_res;
- }
- if($pay_obj && _array_key($pay_obj, 'price', 0) > 0){
- if(WxPostsPayContent::where('post_id', $posts_id)->exists()){
- }else{
- return $this->fail(200004, [], '笔记不能从免费变更成付费付费');
- }
- }
- // 圈子权限检验
- $circle = null;
- if(_empty_($refer_id) && $circle_id){
- $circle = WxCircle::find($circle_id);
- if(Settings::get('app_publish_circle_required', 0, true) == 1){
- if($circle){
- }else{
- return $this->fail(200004, [], '请选择一个'.env('circle_call', '圈子').'再发布吧');
- }
- }
- }
- if(!_empty_($refer_id)){
- $circle = null;
- $circle_id = null;
- }
- // 百度审核
- if(UserUtils::user_permissions_check_by_config($uid, 'audit_posts_white_list')){
- $need_manual_review = false;
- }else{
- $need_manual_review = true;
- $setting_is_audit_posts = Settings::get('is_audit_posts', 0);
- if ($setting_is_audit_posts == 2) {
- $filter_result = BaiduUtils::text_filter($contents);
- if($filter_result){
- if($filter_result['hit_level'] == 2){
- // 不合规
- return $this->fail(200016, ['tip'=>$filter_result['tip_list'], 'hit_word'=>$filter_result['hit_word']]);
- }else if($filter_result['hit_level'] == 0){
- // 审核通过
- $need_manual_review = false;
- }
- }
- }else if($setting_is_audit_posts == 0){
- $need_manual_review = true;
- } else{
- $need_manual_review = false;
- }
- }
- // (0待审核,1审核通过,2驳回)
- $is_examine = 1;
- if($need_manual_review){
- $is_examine = 0;
- }
- // 更新
- $contents = trim($contents);
- $post_conetnt = _mini_phone( _mini_emoji( _mini_aite_replace( $contents ) ) );
- $post_conetnt = $contents_all;
- $updates = [
- 'posts_content' => $post_conetnt,
- ];
- $updates['is_draft'] = $is_draft;
- if(!_empty_($posts_title)){
- $updates['posts_title'] = $posts_title;
- }
- $updates['is_examine'] = $is_examine;
- if($circle_id > 0){
- $updates['circle_id'] = $circle_id;
- $updates['circle_name'] = ($circle && !_empty_(_array_key($circle, 'circle_name', null))) ? $circle['circle_name'] : '广场';
- }
- if($sph_obj){
- $updates['is_wechat_sph'] = true;
- }
- if(!_empty_($useds)){
- $updates['useds'] = implode(',', $useds);
- }
- if($contact_phone){
- $updates['has_fields'] = 1;
- }
- if($voter_id > 0){
- $updates['voter_id'] = $voter_id;
- }else{
- $updates['voter_id'] = 0;
- }
- if (!_empty_($address) && _array_key($address, 'address_name', '')) {
- // 有地址
- $the_address = WxPostsAddress::updateOrCreate([
- 'longitude'=>$address['longitude'], 'latitude'=>$address['latitude']
- ], [
- 'address_name' => $address['address_name'],
- 'address_detailed' => $address['address_detailed'],
- ]);
- if($the_address){
- $updates['address_id'] = $the_address->id;
- }
- }else{
- $updates['address_id'] = 0;
- }
- WxPostsGoods::where('posts_id', $posts_id)->forceDelete();
- if (!_empty_($goods)) {
- $updates['goods_id'] = '0';
- }else{
- $updates['goods_id'] = '';
- }
- if (!_empty_($file_list)) {
- $updates['files_id'] = '0';
- }else{
- $updates['files_id'] = '';
- }
- if (!_empty_($sounds_list)) {
- $updates['sounds_id'] = '0';
- }else{
- $updates['sounds_id'] = '';
- }
- WxPostsTag::where('posts_id', $posts_id)->forceDelete();
- if (!_empty_($tags)) {
- $updates['goods_id'] = '0';
- }else{
- $updates['goods_id'] = '';
- }
- if(!_empty_($votes)){
- $updates['vote_id'] = null;
- }else{
- $updates['vote_id'] = 0;
- // WxPostsVote::where('posts_id', $posts_id)->forceDelete();
- }
- if($is_anonymous){
- if($is_anonymous == 1 && Settings::get('app_vip_anonymous_only', 0) == 1){
- if(!$is_admin){
- $post_author = WxUser::find($post_author_id);
- if($post_author && $post_author->is_member){
- }else{
- return $this->fail(200043, [
- 'title' => '仅会员可用',
- 'content' => '匿名属于会员特权,是否前往开通',
- 'confirmText' => '前往开通',
- 'target_type' => 6,
- 'target_id' => '/pagesA/mine/members/members'
- ], '仅会员可用');
- }
- }
- }
- $updates['is_anonymous'] = 1;
- }else{
- $updates['is_anonymous'] = 0;
- }
- DB::beginTransaction();
- try {
- // todo:
- $updates['is_only_text'] = null;
- $r = WxPost::where('id', $posts_id)->update($updates);
- if($r){
- if($edit_need_coin > 0){
- if($post_author_id == $uid){
- UserUtils::update_user_coins($post_author_id, 28, -$edit_need_coin, '重新编辑笔记(id: '.$posts_id.')花费了'.$edit_need_coin.Settings::get('app_coin_name', '硬币').'。');
- }
- }
- // 先检验是否顺序是一样的,或者是仅仅新添加了图片,未改变顺序
- if(true){
- $current_urls = [];
- $old_img_urls = WxPostsImg::where('posts_id', $posts_id)->pluck('img_url')->toArray();
- $image_urls_ = $image_urls;
- if (!_empty_($image_urls)) {
- foreach ($image_urls as $k => $v) {
- $current_urls[] = $v['url'];
- }
- }
- if(_empty_($old_img_urls) || _empty_($current_urls)){
- if(_empty_($current_urls)){
- WxPostsImg::where('posts_id', $posts_id)->forceDelete();
- }
- }else{
- $is_all_equal = false;
- $is_pre_equal = false;
- if(count($current_urls) == count($old_img_urls)){
- $is_all_equal = true;
- for ($i = 0; $i<count($current_urls); $i ++){
- if($current_urls[$i] != $old_img_urls[$i]){
- $is_all_equal = false;
- }
- }
- }else if(count($current_urls) > count($old_img_urls)){
- $is_pre_equal = true;
- for ($i = 0; $i<count($old_img_urls); $i ++){
- if($current_urls[$i] != $old_img_urls[$i]){
- $is_pre_equal = false;
- }
- }
- if($is_pre_equal){
- $image_urls_ = array_slice($image_urls_, count($old_img_urls));
- }
- }
- if($is_all_equal || $is_pre_equal){
- if($is_all_equal){
- $image_urls_ = [];
- }
- }else{
- WxPostsImg::where('posts_id', $posts_id)->forceDelete();
- }
- }
- if (!empty($photo_url)) {
- WxPostsImg::where('posts_id', $posts_id)->forceDelete();
- $postImages = new WxPostsImg();
- // $post_img['posts_id'] =$posts_id;
- // $post_img['user_id'] =$post_author_id;
- // $post_img['img_url'] =$photo_url;
- $postImages->posts_id = $posts_id;
- $postImages->user_id = $post_author_id;
- $postImages->img_url = $photo_url;
- // $postImages->add($post_img);
- $aas = $postImages->save();
- // var_dump($aas);exit;
- }
- if (!_empty_($image_urls_)) {
- $postImage = [];
- foreach ($image_urls_ as $k => $v) {
- $postImage[$k]['posts_id'] = $posts_id;
- $postImage[$k]['user_id'] = $post_author_id;
- $postImage[$k]['img_url'] = $v['url'];
- if(!StrUtils::endsWith($v['url'] ?? '', '.gif')){
- $img_info = ImageUtils::get_url_img_info($v['url']);
- if($img_info){
- $postImage[$k]['width'] = $img_info['width'];
- $postImage[$k]['height'] = $img_info['height'];
- }
- }else{
- $postImage[$k]['width'] = 0;
- $postImage[$k]['height'] = 0;
- }
- }
- $postImg = new WxPostsImg();
- $postImg->addAll($postImage);
- }
- }
- if(true){
- $current_urls = [];
- $old_file_urls = WxPostsFile::where('post_id', $posts_id)->pluck('url')->toArray();
- $files_ = $file_list;
- if (!_empty_($file_list)) {
- foreach ($file_list as $k => $v) {
- $current_urls[] = $v['url'];
- }
- }
- if(_empty_($old_file_urls) || _empty_($current_urls)){
- if(_empty_($current_urls)){
- WxPostsFile::where('post_id', $posts_id)->forceDelete();
- }
- }else{
- $is_all_equal = false;
- $is_pre_equal = false;
- if(count($current_urls) == count($old_file_urls)){
- $is_all_equal = true;
- for ($i = 0; $i<count($current_urls); $i ++){
- if($current_urls[$i] != $old_file_urls[$i]){
- $is_all_equal = false;
- }
- }
- }else if(count($current_urls) > count($old_file_urls)){
- $is_pre_equal = true;
- for ($i = 0; $i<count($old_file_urls); $i ++){
- if($current_urls[$i] != $old_file_urls[$i]){
- $is_pre_equal = false;
- }
- }
- if($is_pre_equal){
- $files_ = array_slice($files_, count($old_file_urls));
- }
- }
- if($is_all_equal || $is_pre_equal){
- if($is_all_equal){
- $files_ = [];
- }
- }else{
- WxPostsFile::where('post_id', $posts_id)->forceDelete();
- }
- }
- if(!_empty_($files_)){
- foreach ($files_ as $file){
- if($file['name'] && $file['url']){
- $file_model = new WxPostsFile();
- $file_model->name = $file['name'];
- $file_model->url = $file['url'];
- $file_model->size = _array_key($file, 'size', 0);
- $file_model->post_id = $posts_id;
- $file_model->save();
- }
- }
- }
- }
- if(true){
- $current_urls = [];
- $old_sound_urls = WxPostsSound::where('post_id', $posts_id)->pluck('url')->toArray();
- $sounds_list_ = $sounds_list;
- if (!_empty_($sounds_list)) {
- foreach ($sounds_list as $k => $v) {
- $current_urls[] = $v['url'];
- }
- }
- if(_empty_($old_sound_urls) || _empty_($current_urls)){
- if(_empty_($current_urls)){
- WxPostsSound::where('post_id', $posts_id)->forceDelete();
- }
- }else{
- $is_all_equal = false;
- $is_pre_equal = false;
- if(count($current_urls) == count($old_sound_urls)){
- $is_all_equal = true;
- for ($i = 0; $i<count($current_urls); $i ++){
- if($current_urls[$i] != $old_sound_urls[$i]){
- $is_all_equal = false;
- }
- }
- }else if(count($current_urls) > count($old_sound_urls)){
- $is_pre_equal = true;
- for ($i = 0; $i<count($old_sound_urls); $i ++){
- if($current_urls[$i] != $old_sound_urls[$i]){
- $is_pre_equal = false;
- }
- }
- if($is_pre_equal){
- $sounds_list_ = array_slice($sounds_list_, count($old_sound_urls));
- }
- }
- if($is_all_equal || $is_pre_equal){
- if($is_all_equal){
- $sounds_list_ = [];
- }
- }else{
- WxPostsSound::where('post_id', $posts_id)->forceDelete();
- }
- }
- if(!_empty_($sounds_list_)){
- foreach ($sounds_list_ as $sound){
- $sound_model = new WxPostsSound();
- $sound_model->name = $sound['name'];
- $sound_model->time = $sound['time'];
- $sound_model->url = $sound['url'];
- $sound_model->post_id = $posts_id;
- $sound_model->save();
- }
- }
- }
- if (!_empty_($video_urls)) {
- $video_updates = [
- 'video_url' => $video_urls,
- 'video_thumb_url' => $videoThumbUrl,
- 'video_width' => $video_width,
- 'video_height' => $video_height
- ];
- $attachment = FileUtils::get_url_attach($video_urls);
- if($attachment->state == 2){
- // 状态(0正常,1用户删除,2管理员下架, 3审核中 4冻结中 5已清理)
- $video_updates['posts_video_state'] = 5;
- }else if($attachment->state == 3 || $attachment->state == 4){
- $video_updates['posts_video_state'] = 4;
- }else if(in_array($attachment->cos_review, [3,4,5])){
- $video_updates['posts_video_state'] = 3;
- }
- WxPostsVideo::updateOrCreate(['posts_id'=>$posts_id, 'user_id'=>$post_author_id], $video_updates);
- }
- if(!_empty_($votes)){
- $vote_updates = [];
- foreach ([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] as $num){
- if(_array_key($votes, $num - 1, '')){
- $vote_updates['option'.$num] = _array_key($votes, $num - 1, '');
- }
- }
- WxPostsVote::updateOrCreate([
- 'post_id' => $posts_id
- ],$vote_updates);
- }
- Utils::image_state_change($image_state_change_list, 1);
- if($pay_obj && _array_key($pay_obj, 'price', 0) > 0){
- WxPostsPayContent::where('post_id', $posts_id)->update([
- 'words_percent' => _array_key($pay_obj, 'words_percent', 100),
- 'is_file' => _array_key($pay_obj, 'is_file', 0),
- 'is_img' => _array_key($pay_obj, 'is_img', 0),
- 'is_video' => _array_key($pay_obj, 'is_video', 0),
- 'is_sound' => 0,
- 'hidden' => _array_key($pay_obj, 'hidden', ''),
- 'price' => _array_key($pay_obj, 'price', 0),
- 'credit_type' => _array_key($pay_obj, 'credit_type', 0)
- ]);
- }
- if (!_empty_($goods)) {
- $postGoods = [];
- foreach ($goods as $k => $v) {
- $postGoods[$k]['posts_id'] = $posts_id;
- $postGoods[$k]['goods_id'] = $v['id'];
- Redis::sadd('realtime:others:set', json_encode([$v['id'], 3, 10]));
- }
- $goods = new WxPostsGoods();
- $goods->addAll($postGoods);
- }
- if (!_empty_($tags)) {
- $postTag = [];
- $tagsIds = [];
- foreach ($tags as $k => $v) {
- $postTag[$k]['posts_id'] = $posts_id;
- $postTag[$k]['tags_id'] = $v['id'];
- $tagsIds[] = $v['id'];
- Redis::sadd('realtime:others:set', json_encode([$v['id'], 5, 10]));
- }
- $tags = new WxPostsTag();
- $tags->addAll($postTag);
- WxTag::whereIn('id', $tagsIds)->increment('tags_number');
- if($circle_id > 0){
- CircleUtils::add_circle_tags($circle_id, $tagsIds);
- }
- }
- if(_array_key($updates, 'has_fields', 0) == 1){
- WxPostsField::updateOrCreate(['post_id'=>$posts_id],['contact_phone'=>$contact_phone]);
- }else{
- if(_empty_($contact_phone)){
- WxPostsField::updateOrCreate(['post_id'=>$posts_id],['contact_phone'=>null]);
- }
- }
- if($circle_id > 0){
- Redis::sadd('realtime:others:set', json_encode([$circle_id, 2, 10]));
- }
- Redis::sadd('realtime:others:set', json_encode([$post_author_id, 4, 10]));
- if(_array_key($updates, 'is_wechat_sph', false) == true){
- update_post_meta($posts_id, 'wechat_sph', $sph_obj, 'j');
- }
- if($circle_id){
- Cache::forget('circle:postCount:'.$circle_id);
- }
- Cache::forget('user:post:count:'.$post_author_id);
- // 视频封面
- if($video_urls && _empty_($videoThumbUrl)){
- VideoSnapshotJob::dispatch(WxPostsVideo::where('posts_id', $posts_id)->value('id'));
- }
- Cache::forget('posts:post_type:'.$posts_id);
- Cache::forget('get_the_title:'.$posts_id.':30');
- Cache::forget('get_the_title:'.$posts_id.':15');
- Cache::forget('get_the_title:'.$posts_id.':100');
- Cache::forget('get:post:goods:'.$posts_id);
- Cache::forget('get:post:tags:'.$posts_id);
- Cache::forget('get:post:files:'.$posts_id);
- Cache::forget('get:post:sounds:'.$posts_id);
- UpdatePostVideoIdJob::dispatch($posts_id);
- UpdatePostTagIdJob::dispatch($posts_id);
- UpdatePostOnlyTextJob::dispatch($posts_id);
- if($is_examine === 0){
- UserUtils::assistant_notice_review(101, $posts_id);
- }
- DB::commit();;
- return $this->success(['id'=>$posts_id, 'post_id'=>$posts_id, 'tip'=> '修改成功', 'ok' => Settings::get('app_publish_success_popup', 0) == 1 ? 1 : 2, 'target_type' => -6, 'target_id' => '/pages/sticky/sticky?id='.$posts_id, 'promotion' => 1]);
- }
- DB::rollBack();
- return $this->fail(200006);
- } catch (\Exception $e) {
- DB::rollBack();
- _logger_(__file__, __line__, $e->getMessage());
- return $this->fail(200006);
- }
- }
- private function checkPost(&$editer, &$is_only_text, &$request, &$image_state_change_list, &$posts_title, &$contents, &$imagetext_content, &$image_urls, &$video_urls, &$videoThumbUrl,
- &$refer_id, &$useds, &$bureaus, &$votes, &$sph_obj, &$file_list, &$sounds_list, &$contact_phone, &$pay_obj, $voter_id){
- // todo: 1
- if(true){
- if(_empty_($refer_id)){
- $refer_id = 0;
- }else{
- $refer_id = _abs($refer_id);
- }
- if($refer_id > 0){
- $refer_post_refer_id = WxPost::where('id', $refer_id)->value('refer_id');
- if($refer_post_refer_id > 0){
- return $this->fail(200010, [], '该笔记为转发内容,不能再次转发');
- }
- }
- if(_empty_($voter_id)){
- $voter_id = 0;
- }else{
- $voter_id = _abs($voter_id);
- }
- if($voter_id > 0){
- if(WxVoter::where('id', $voter_id)->exists()){
- }else{
- return $this->fail(200003, [], '鞋带的选票实际不存在');
- }
- }
- }
- // todo: 2
- if(true){
- if(!_empty_($useds)){
- $useds = explode(',', $useds);
- if(count(array_unique($useds)) != count($useds)){
- return $this->fail(200004, [], '闲置商品有重复');
- }
- if(WxUsedGood::whereIn('id', $useds)->count() != count($useds)){
- return $this->fail(200004, [], '闲置商品参数检验不合法');
- }
- }
- if(_empty_($useds)){
- $useds = [];
- }else{
- if(!is_array($useds)){
- return $this->fail(200004, [], '闲置商品参数检验不合法');
- }
- if(count($useds) > 5){
- return $this->fail(200004, [], '最多选择5个闲置商品');
- }
- $is_only_text = false;
- }
- }
- // todo: 4
- if(true){
- $vote_list = $request->vote_list;
- if($vote_list && count($vote_list) >= 2){
- foreach ($vote_list as $vote){
- if($vote['value']){
- $votes[] = $vote['value'];
- }
- }
- if(count($votes) != count($vote_list)){
- return $this->fail(200004);
- }
- }
- }
- // todo: 5
- if(true){
- $sph_video_feed_token = $request->sph_video_feed_token;
- $sph_image_urls = $request->sph_image_urls;
- if(_empty_($sph_video_feed_token) || strpos($sph_video_feed_token, 'token/') !== 0){
- $sph_video_feed_token = null;
- $sph_image_urls = null;
- }else{
- $sph_video_feed_token = trim($sph_video_feed_token);
- }
- if(_empty_($sph_image_urls)){
- $sph_image_urls = null;
- }
- $sph_img = '';
- if($sph_video_feed_token){
- if($sph_image_urls && _array_key($sph_image_urls[0], 'url', '')){
- $sph_img = $sph_image_urls[0]['url'];
- }
- $sph_obj = [
- 'type' => 'video',
- 'feed_token' => $sph_video_feed_token,
- 'img' => $sph_img
- ];
- if($sph_img){
- $image_state_change_list[] = $sph_img;
- }
- $is_only_text = false;
- }
- }
- // todo: 6
- if(true){
- if(!_empty_($file_list)){
- if(count($file_list) > Settings::get('app_upload_max_files', 5, true)){
- return $this->fail(200020);
- }
- foreach ($file_list as $file){
- if(_empty_(_array_key($file, 'name', '')) || _empty_(_array_key($file, 'url', ''))){
- return $this->fail(200019);
- }
- }
- }else{
- $file_list = [];
- }
- }
- // todo: 7
- if(true){
- if(!_empty_($sounds_list)){
- if(count($sounds_list) > Settings::get('app_upload_max_sounds', 1, true)){
- return $this->fail(200023);
- }
- foreach ($sounds_list as $sound){
- if(_empty_(_array_key($sound, 'name', '')) || _empty_(_array_key($sound, 'url', '')) || _empty_(_array_key($sound, 'time', ''))){
- return $this->fail(200024);
- }
- if(strpos($sound['url'], 'http') === false){
- return $this->fail(200024);
- }
- }
- }else{
- $sounds_list = [];
- }
- }
- // todo: 8
- if(true){
- if(!_empty_($contact_phone)){
- if(!StrUtils::is_phone_number($contact_phone)){
- return $this->fail(200004, [], '联系手机号不合法');
- }
- }else{
- $contact_phone = null;
- }
- }
- // todo: 9
- if(true){
- if($pay_obj && _array_key($pay_obj, 'price', 0) > 0){
- if(_array_key($pay_obj, 'words_percent', 100) == 100 && _array_key($pay_obj, 'is_file', 0) == 0 && _array_key($pay_obj, 'is_img', 0) == 0 && _array_key($pay_obj, 'is_video', 0) == 0 && _array_key($pay_obj, 'hidden', '') == '' ){
- return $this->fail(200029);
- }
- if(!in_array(_array_key($pay_obj, 'credit_type', 0), [0, 1])){
- return $this->fail(200004);
- }
- if(_array_key($pay_obj, 'credit_type', 0) == 0){
- if(_array_key($pay_obj, 'price', 0) > Settings::get('app_pay_max_coins', 10000)){
- return $this->fail(200030);
- }
- }else if(_array_key($pay_obj, 'credit_type', 0) == 1){
- if(_array_key($pay_obj, 'price', 0) > Settings::get('app_pay_max_balance', 1000)){
- return $this->fail(200030);
- }
- }
- if(_array_key($pay_obj, 'words_percent', 100) < 100){
- if(_array_key($pay_obj, 'words_percent', 100) > 90 || _array_key($pay_obj, 'words_percent', 100) < 50){
- return $this->fail(200032);
- }
- if(mb_strlen(strip_tags($contents)) < 50){
- return $this->fail(200031, [], '若开启篇幅付费,笔记内容不能少于50字');
- }
- }
- if(_array_key($pay_obj, 'is_file', 100) == 1 && count($file_list) <= 0){
- return $this->fail(200004);
- }
- if(_array_key($pay_obj, 'is_img', 100) == 1 && count($image_urls) <= 0){
- return $this->fail(200004);
- }
- if(_array_key($pay_obj, 'is_video', 100) == 1 && _empty_($video_urls)){
- return $this->fail(200004);
- }
- $is_only_text = false;
- }else{
- $pay_obj = [];
- }
- }
- if(true){
- // 内容修正部分
- if($editer == 'imagetext'){
- $contents = $imagetext_content;
- if(!preg_match('/<(img|video|table|audio|a)[^>]+>/is', $contents)){
- $contents = strip_tags($contents, ['<a>', '<br>', '<p>']);
- }else{
- $is_only_text = false;
- }
- $image_urls = null;
- $video_urls = null;
- $videoThumbUrl = null;
- $votes = null;
- $posts_title = trim(strip_tags($posts_title));
- if(_empty_($posts_title)){
- // $posts_title = '';
- }
- }else{
- // $posts_title = '';
- }
- if($refer_id > 0){
- $contents = strip_tags($contents);
- $is_only_text = false;
- }
- $contents = PostUtils::post_icon_inline_process($contents);
- // 内容检测
- if(mb_strlen(strip_tags($contents)) <= 0){
- if($editer == 'imagetext'){
- if(_empty_($posts_title)){
- return $this->fail(200025);
- }
- }else{
- return $this->fail(200025);
- }
- }else if(preg_match('$这是一段示例$', strip_tags($contents))){
- return $this->fail(200026);
- }
- if($image_urls){
- foreach ($image_urls as $img){
- if(is_array($img)){
- $image_state_change_list[] = $img['url'];
- }else{
- $image_state_change_list[] = $img;
- }
- }
- $is_only_text = false;
- }
- if($video_urls){
- $image_state_change_list[] = $video_urls;
- $is_only_text = false;
- }
- if($videoThumbUrl){
- $image_state_change_list[] = $videoThumbUrl;
- }
- if(!_empty_($file_list)){
- foreach ($file_list as $file){
- $image_state_change_list[] = $file['url'];
- }
- $is_only_text = false;
- }
- if(!_empty_($sounds_list)){
- foreach ($sounds_list as $sound){
- $image_state_change_list[] = $sound['url'];
- }
- $is_only_text = false;
- }
- preg_match_all("/<(img|video).*?src[^\'\"]+[\'\"]([^\"\']+)[^>]+>/is", $contents, $result);
- $post_images_arr = $result[2];
- if($post_images_arr){
- foreach ($post_images_arr as $url){
- $image_state_change_list[] = $url;
- }
- }
- }
- }
- /**
- * 发帖
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function addPost(Request $request)
- {
- global $__MINI_GLOBAL_TENANT_ID__,$__MINI_GLOBAL_CURRENT_PLAYER_ID__,$__MINI_GLOBAL_DEVICE__,$__MINI_GLOBAL_IS_ADMIN_SUPER__;
- $uid = $request->uid;
- $is_only_text = true;
- $is_admin = UserUtils::is_mini_admin($uid);
- if(true){
- if(!UserUtils::is_user_can_speak($uid)){
- return $this->fail(200043, [
- 'title' => '禁言中,无法言论',
- 'content' => '是否前往解除限制',
- 'confirmText' => '去解除',
- 'target_type' => 6,
- 'target_id' => '/pagesA/mine/unlock/unlock?user_id='.$uid
- ], '您当前处于禁言期间,无法言论');
- }
- if(!$is_admin && Cache::has('addPost:time:'.$__MINI_GLOBAL_TENANT_ID__.':'.$uid)){
- return $this->fail(200027);
- }
- if(!$is_admin && !str_contains(env(_multi_key('APP_PUBLISH_POST_SPH_USER'), ''), $uid) && (WxPost::where('user_id', $uid)->where('tenant_id', $__MINI_GLOBAL_TENANT_ID__)->whereDate('created_at', current_time('day'))->count() >= Settings::get('app_publish_times_max', 3, true))){
- return $this->fail(200028);
- }
- $arr = UserUtils::user_action_permissions_check($uid, 'publish_post');
- if($arr['code'] == 0){
- return $this->fail(200000, [], $arr['msg']);
- }
- $user = WxUser::find($uid);
- // if(mb_strlen( str_replace( [Settings::get('default_user_name', '微信用户'), '微信用户', '普通用户'], '', $user->user_name )) != mb_strlen($user->user_name)){
- // return $this->fail(200041);
- // }
- // 验证资料
- if(Settings::get('app_publish_force_bind_phone', 0, true) == 1){
- if(_empty_($user->phone) && _empty_($__MINI_GLOBAL_CURRENT_PLAYER_ID__)){
- return $this->fail(200043, [
- 'title' => '未绑定手机号',
- 'content' => '前往绑定',
- 'confirmText' => '去绑定',
- 'target_type' => 6,
- 'target_id' => '/pagesA/mine/editmine/editmine?phone=1'
- ], '未绑定手机号');
- }
- }
- if(Settings::get('app_publish_force_real_name', 0, true) == 1){
- if(_empty_($user->real_name) && _empty_($__MINI_GLOBAL_CURRENT_PLAYER_ID__)){
- return $this->fail(200043, [
- 'title' => '未实名认证',
- 'content' => '您还没有实名认证,是否前往认证',
- 'confirmText' => '去认证',
- 'target_type' => 6,
- 'target_id' => '/pagesA/mine/realname/realname'
- ], '未实名认证');
- }
- }
- $force_university = Settings::get('app_publish_force_university', [], true);
- if(!_empty_($force_university)){
- if(_empty_($user->university)){
- return $this->fail(200043, [
- 'title' => '未学生认证',
- 'content' => '您还没有学生认证,是否前往认证',
- 'confirmText' => '去认证',
- 'target_type' => 6,
- 'target_id' => '/pagesA/attestation/attestation'
- ], '未学生认证');
- }else{
- if(!in_array('-1', $force_university)) {
- $student_certify = WxUserStudentCertify::find($user->id);
- if ($student_certify) {
- if (!in_array($student_certify->sid, $force_university)) {
- return $this->fail(200000, [], '仅“' . Settings::get('app_publish_force_university_tip', '', true) . '”可发布');
- }
- }
- }
- }
- }
- if(Settings::get('app_publish_force_subscribe_mp', 0, true) == 1){
- if(_empty_($user->weixin_mp_openid) && _empty_($__MINI_GLOBAL_CURRENT_PLAYER_ID__)){
- $weapp = new WeApp('mp');
- $mpServicer = $weapp->getMpServicer();
- try {
- $url = $mpServicer->getQrCodeWithPara(0, 'user:bind:'.$user->id);
- }catch (\Exception $e){
- return $this->fail(200006, [], '生成公众号二维码失败,请检查[全局配置-支付-微信-公众号]');
- }
- if($url){
- $qrCode = QrCode::format('png')->size(300)->generate($url);
- $image = Image::make($qrCode);
- $image->resizeCanvas(300, 300 + 60, 'bottom', false, '#ffffff'); // 增加高度,保持宽高比,背景色为白色
- $mp_app_name = Settings::get('mp_app_name', '');
- $text_tip = '关注'.$mp_app_name.'公众号,可以更方便通知到您';
- if(mb_strlen($mp_app_name) > 4){
- $text_tip = '关注'.$mp_app_name.'公众号';
- }
- $image->text($text_tip, 150, 40, function($font){
- $font->file(public_path('storage/font/DingTalk_JinBuTi_Regular.ttf')); // 字体文件路径
- $font->size(13); // 字体大小
- $font->color('#000000'); // 字体颜色
- $font->align('center'); // 水平对齐
- $font->valign('top'); // 垂直对齐
- });
- $base64 = 'data:image/png;base64,' . base64_encode($image->encode('png')->getEncoded());
- return $this->fail(200043, [
- 'title' => '未关注公众号,无法实时获取通知',
- 'content' => '前往关注',
- 'confirmText' => '去关注',
- 'target_type' => 26,
- 'target_id' => $base64
- ], '未关注公众号');
- }
- }
- }
- }
- $contents_all = $request->posts_content;
- $contents = trim($request->posts_content);
- $circle_id = $request->circle_id;
- if(_empty_($circle_id)){
- $circle_id = null;
- }
- $refer_id = _empty_default_($request->refer_id, 0);
- $voter_id = _empty_default_($request->voter_id, 0);
- $photo_url = _empty_default_($request->photo_url, 0);
- $is_draft = _empty_default_($request->is_draft, 0);
- $editer = $request->editer ?? 'simple';
- $posts_title = _empty_default_($request->posts_title, '');
- $imagetext_content = trim($request->imagetext_content) ?? '';
- $image_state_change_list = [];
- // [["id" => 74,"tags_name" => "啦啦啦啦"],]
- $tags = $request->tags;
- // [ ["id" => 1045,"name" => "爬宠饲养盒","pic" => "url"], ]
- $goods = $request->goods;
- // [
- // "latitude" => 32.45217
- // "longitude" => 118.43575
- // "address_name" => "安徽省滁州市来安县东大街9号"
- // "address_detailed" => "来安县新安镇永阳社区综治中心(白云商厦东北)"
- // ]
- $address = $request->address;
- // [ ["url" => "url"], ]
- $image_urls = $request->image_urls;
- // null || video_url
- $video_urls = $request->video_url;
- // null || img_url
- $videoThumbUrl = Utils::isImgUrl($request->video_thumb_url) ? $request->video_thumb_url : '';
- // 0 || 1080
- $video_width = $request->video_width;
- // 0 || 1080
- $video_height = $request->video_height;
- $useds = _empty_default_($request->useds, []);
- $bureaus = _empty_default_($request->bureaus, []);
- $sph_obj = null;
- $votes = [];
- $file_list = $request->file_list;
- $sounds_list = $request->sounds_list;
- $contact_phone = $request->contact_phone;
- $pay_obj = $request->pay_obj;
- $is_anonymous = _empty_default_($request->is_anonymous, 0) == 1 ? 1 : 0;
- if($is_anonymous == 1 && Settings::get('app_vip_anonymous_only', 0) == 1){
- if($user->is_member){
- }else{
- return $this->fail(200043, [
- 'title' => '仅会员可用',
- 'content' => '匿名属于会员特权,是否前往开通',
- 'confirmText' => '前往开通',
- 'target_type' => 6,
- 'target_id' => '/pagesA/mine/members/members'
- ], '仅会员可用');
- }
- }
- $check_res = $this->checkPost($editer, $is_only_text, $request, $image_state_change_list, $posts_title, $contents, $imagetext_content,$image_urls,$video_urls, $videoThumbUrl,
- $refer_id, $useds, $bureaus, $votes, $sph_obj, $file_list, $sounds_list, $contact_phone, $pay_obj, $voter_id);
- if ($check_res instanceof JsonResponse) {
- return $check_res;
- }
- // 圈子权限检验
- $circle = null;
- if(_empty_($refer_id) && $circle_id){
- $circle = WxCircle::find($circle_id);
- if(Settings::get('app_publish_circle_required', 0, true) == 1){
- if($circle){
- }else{
- return $this->fail(200004, [], '请选择一个'.env('circle_call', '圈子').'再发布吧');
- }
- }
- }
- if(!_empty_($refer_id)){
- $circle = null;
- $circle_id = null;
- }
- // 百度审核
- if(UserUtils::user_permissions_check_by_config($uid, 'audit_posts_white_list')){
- $need_manual_review = false;
- }else if($sph_obj && !_empty_(_array_key($sph_obj, 'feed_token', '')) && str_contains(env(_multi_key('APP_PUBLISH_POST_SPH_USER'), ''), $uid)){
- $need_manual_review = false;
- }else{
- $need_manual_review = true;
- $setting_is_audit_posts = Settings::get('is_audit_posts', 0);
- if ($setting_is_audit_posts == 2) {
- $filter_result = BaiduUtils::text_filter($contents);
- if($filter_result){
- if($filter_result['hit_level'] == 2){
- // 不合规
- return $this->fail(200016, ['tip'=>$filter_result['tip_list'], 'hit_word'=>$filter_result['hit_word']]);
- }else if($filter_result['hit_level'] == 0){
- // 审核通过
- $need_manual_review = false;
- }
- }
- }else if($setting_is_audit_posts == 0){
- $need_manual_review = true;
- } else{
- $need_manual_review = false;
- }
- }
- // (0待审核,1审核通过,2驳回)
- $is_examine = 1;
- if($need_manual_review){
- $is_examine = 0;
- }
- $pay_content_id = 0;
- if($pay_obj && _array_key($pay_obj, 'price', 0) > 0){
- $pay_content = new WxPostsPayContent();
- $pay_content->post_id = -$uid;
- $pay_content->words_percent = _array_key($pay_obj, 'words_percent', 100);
- $pay_content->is_file = _array_key($pay_obj, 'is_file', 0);
- $pay_content->is_img = _array_key($pay_obj, 'is_img', 0);
- $pay_content->is_video = _array_key($pay_obj, 'is_video', 0);
- $pay_content->is_sound = 0;
- $pay_content->hidden = _array_key($pay_obj, 'hidden', '');
- $pay_content->price = _array_key($pay_obj, 'price', 0);
- $pay_content->credit_type = _array_key($pay_obj, 'credit_type', 0);
- $pay_content->save();
- $pay_content_id = $pay_content->id;
- $is_only_text = false;
- }
- if(_empty_($refer_id) && $circle){
- $res = CircleUtils::user_can_publish($user, $circle);
- if($res['code'] == 0){
- return $this->fail(200000, [], $res['tip']);
- }else if($res['code'] == 200011 || $res['code'] == 200012){
- return $this->fail($res['code'], [], $res['tip']);
- }
- }
- if($image_state_change_list && count($image_state_change_list) > 0){
- $is_only_text = false;
- }
- if($is_only_text){
- if(Settings::get('app_publish_media_required', 0, true) == 1 && !$__MINI_GLOBAL_IS_ADMIN_SUPER__){
- return $this->fail(200001, [], '笔记需要带上视频或图片哦');
- }
- }
- if(Cache::has('lock:add:post:'.$uid)){
- // return $this->fail(700003);
- }
- Cache::put('lock:add:post:'.$uid, 1, 60);
- $post_id = PostsRepositores::add($uid, $is_examine, $posts_title, $contents_all, $circle_id, $tags, $goods, $image_urls, $video_urls, $address, $videoThumbUrl, $video_width, $video_height, $votes, $file_list, $sounds_list, $pay_content_id, $__MINI_GLOBAL_DEVICE__, $refer_id, $contact_phone, $sph_obj, $useds, $bureaus, $is_anonymous, $voter_id,$photo_url,$is_draft);
- Cache::forget('lock:add:post:'.$uid);
- if ($post_id) {
- if(Settings::get('app_publish_frequency_min', 10, true) > 0){
- Cache::put('addPost:time:'.$__MINI_GLOBAL_TENANT_ID__.':'.$uid, 1, 60 * Settings::get('app_publish_frequency_min', 10, true));
- }
- if($circle_id){
- Cache::forget('circle:postCount:'.$circle_id);
- ForgetCircleUnreadCountJob::dispatch($circle_id);
- $online_user_ids = UserUtils::user_onlines(1);
- if($online_user_ids && is_array($online_user_ids)){
- if($online_user_ids > 100){
- $online_user_ids = WxUserCircle::whereIn('user_id', $online_user_ids)->where('circle_id', $circle_id)->where('user_circle_state', 0)->pluck('user_id')->toArray();
- }
- if($online_user_ids && is_array($online_user_ids)){
- foreach ($online_user_ids as $online_user){
- Cache::forget('user_circle_unread_count:'.$online_user);
- }
- }
- }
- }
- Cache::forget('user:post:count:'.$uid);
- // 视频封面
- if($video_urls && _empty_($videoThumbUrl)){
- VideoSnapshotJob::dispatch(WxPostsVideo::where('posts_id', $post_id)->value('id'));
- }
- UserUtils::add_user_experience($uid, 1);
- GatewayUtils::success('all', 6);
- CreatePostSyncJob::dispatch($post_id, $uid, $contents, $circle_id, $tags, $goods, $image_urls, $video_urls, $address, $videoThumbUrl, $video_width, $video_height);
- UserInputSafeCheckJob::dispatch($uid, $contents);
- Utils::image_state_change($image_state_change_list, 1);
- UserPublishedFollowJob::dispatch($uid, $circle_id, '')->delay(now()->addSeconds(5));
- // 机器人点赞
- CalculateLikesNumJob::dispatch($post_id);
- UpdatePostVideoIdJob::dispatch($post_id);
- UpdatePostTagIdJob::dispatch($post_id);
- CalculateFollowsNumJob::dispatch($uid);
- Redis::sadd('realtime:post:set', $post_id);
- UpdatePostOnlyTextJob::dispatch(0);
- if($circle_id > 0){
- ImitateCircleJoinStepJob::dispatch($circle_id, mini_rand(1, 100) <= 60 ? mini_rand(1, 2) : 0)->delay(now()->addMinutes(mini_rand(1, 20)));
- }
- // 订阅消息id
- $tmplIds = [];
- if($__MINI_GLOBAL_DEVICE__ == 'mp'){
- $comment_add_id = Settings::get('mini_template_message_comment_add', '');
- if(!_empty_($comment_add_id)){
- $tmplIds[] = $comment_add_id;
- }
- $exceptional_id = Settings::get('mini_template_message_exceptional', '');
- if(!_empty_($exceptional_id)){
- $tmplIds[] = $exceptional_id;
- }
- $beliked_id = Settings::get('mini_template_message_beliked', '');
- if(!_empty_($beliked_id)){
- $tmplIds[] = $beliked_id;
- }
- }
- if($is_examine == 0){
- // 待审核
- //给对应圈子圈主发送待审核信息
- if($circle){
- UserUtils::assistant_notice($circle['user_id'], '您创建的'.env('circle_call', '圈子').'「' . '<a href="/pages/circle/list?id='.$circle['id'].'">'.$circle['circle_name'].'</a>' . '」有一篇新的内容等待您去审核哦,请务必在24小时内进行处理。');
- // UserUtils::assistant_notice('admin', '圈子「' . '<a href="/pages/circle/list?id='.$circle['id'].'">'.$circle['circle_name'].'</a>' . '」有一篇新的笔记等待您去审核哦!');
- UserUtils::assistant_notice_review(101, $post_id);
- }else{
- UserUtils::assistant_notice_review(101, $post_id);
- }
- }else{
- // 审核通过
- //给对应圈子圈主发送新内容信息
- if($circle){
- UserUtils::assistant_notice($circle['user_id'], '您创建的'.env('circle_call', '圈子').'「' . '<a href="/pages/circle/list?id='.$circle['id'].'">'.$circle['circle_name'].'</a>' . '」有一篇新的内容发布,您要好好把关哦。');
- }
- _mini_aite($uid, $contents, 1, false, $post_id);
- $msg = UserUtils::reward_user_coin($uid, 'publish');
- if($msg){
- UserUtils::assistant_notice($uid, '您发表的笔记(id:<a href="/pages/sticky/sticky?id='.$post_id.'">'.$post_id.'</a>)已经审核通过,并获得发布奖励:'.$msg);
- return $this->success(['post_id'=>$post_id, 'tip'=>'发布成功', 'tmplIds'=>$tmplIds, 'reward_coin'=>$msg, 'ok'=> Settings::get('app_publish_success_popup', 0) == 1 ? 1 : 2, 'target_type' => -6, 'target_id' => '/pages/sticky/sticky?id='.$post_id, 'promotion' => 1 ]);
- }else{
- UserUtils::assistant_notice($uid, '您发表的笔记(id:<a href="/pages/sticky/sticky?id='.$post_id.'">'.$post_id.'</a>)已经审核通过');
- return $this->success( ['post_id'=>$post_id, 'tip'=>'发布成功', 'tmplIds'=>$tmplIds, 'ok' => Settings::get('app_publish_success_popup', 0) == 1 ? 1 : 2, 'target_type' => -6, 'target_id' => '/pages/sticky/sticky?id='.$post_id, 'promotion' => 1 ] );
- }
- }
- return $this->success( ['post_id'=>$post_id, 'tip'=>'我们会以最快的速度为您审贴', 'tmplIds'=>$tmplIds, 'ok' => 0, 'target_type' => -6, 'target_id' => '/pages/sticky/sticky?id='.$post_id, 'promotion' => 1 ] );
- } else {
- if($pay_content_id > 0){
- WxPostsPayContent::where('id', $pay_content_id)->forceDelete();
- }
- return $this->fail(416001, $post_id);
- }
- }
- /**
- * 视频滑动
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function videoSlide(Request $request){
- $uid = $request->uid;
- $post_id = $request->firstVideo;
- $page = $request->page;
- $limit = $request->limit;
- if(_empty_($limit)){
- $limit = 10;
- }else{
- $limit = _between_($limit, 1, 100);
- }
- _limit_user('video:slide', $uid, 30);
- $data = WxPost::has('video')->where('is_examine', 1)->where('posts_state', 0)->inRandomOrder()->simplePaginate($limit);
- if($data){
- PostUtils::reset_loop();
- $data->map(function ($v, $k) use ($uid){
- return PostUtils::defaultProcess($k, $v,75);
- });
- if($page == 1 && $post_id){
- $data2 = WxPost::where('id', $post_id)->get();
- $data2->map(function ($v, $k) use ($uid){
- return PostUtils::defaultProcess($k, $v, 75);
- });
- $data = json_decode($data->toJson(), true);
- $data['data'] = $data2->concat($data['data']);
- }
- return $this->success($data);
- }else{
- return $this->fail(200003);
- }
- }
- /**
- * 点赞
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function like(Request $request)
- {
- $uid = $request->uid;
- $posts_id = $request->posts_id;
- if(_empty_($posts_id)){
- return $this->fail(200001);
- }
- $posts_id = _abs($posts_id);
- PostsRepositores::addLike($uid, $posts_id);
- return $this->success();
- }
- /**
- * 收藏
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function collect(Request $request)
- {
- $uid = $request->uid;
- $posts_id = $request->posts_id;
- if(_empty_($posts_id)){
- return $this->fail(200001);
- }
- $posts_id = _abs($posts_id);
- PostsRepositores::addCollect($uid, $posts_id);
- update_user_visit($uid, 1, $posts_id);
- return $this->success();
- }
- /** 图片不适
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function blur(Request $request){
- $uid = $request->uid;
- $posts_id = $request->posts_id;
- if(_empty_($posts_id)){
- return $this->fail(200001);
- }
- $posts_id = _abs($posts_id);
- $post = WxPost::find($posts_id);
- if(_empty_($post)){
- return $this->fail(200003);
- }
- if(!is_object_user_special($uid, $post->tenant_id) && $post->user_id != $uid){
- return $this->fail(200000);
- }
- if(PostsRepositores::addBlur($posts_id)){
- return $this->success();
- }else{
- return $this->fail(200002);
- }
- }
- /** 移动圈子
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function move(Request $request){
- $uid = $request->uid;
- $posts_id = $request->posts_id;
- $circle_id = $request->circle_id;
- if(_empty_($posts_id) || _empty_($circle_id)){
- return $this->fail(200001);
- }
- $posts_id = _abs($posts_id);
- $post = WxPost::find($posts_id);
- if(_empty_($post)){
- return $this->fail(200003);
- }
- if(!is_object_user_special($uid, $post->tenant_id)){
- return $this->fail(200000);
- }
- $user_name = WxUser::where('id', $uid)->value('user_name');
- $post_user_id = $post->user_id;
- $post_circle_id = $post->circle_id;
- $post_circle_name = $post->circle_name;
- $circle = WxCircle::find($circle_id);
- if($circle){
- WxPost::where('id', $posts_id)->update(['circle_id'=>$circle->id, 'circle_name'=>$circle->circle_name]);
- UpdateCommentCircleJob::dispatch([$posts_id]);
- Cache::forget('get_post_circle_user_id:'.$posts_id);
- UserUtils::add_user_notice(2002, $post_user_id, '笔记转移通知', '您的「<a href="/pages/sticky/sticky?id='.$post->id.'">笔记(id:'.$post->id.')</a>」已被管理员「<a href="/pages/user/user?id='.$uid.'">'.$user_name.'</a>」从「<a href="/pages/circle/list?id='.$post_circle_id.'">'.$post_circle_name.'</a>」'.env('circle_call', '圈子').'转移到「<a href="/pages/circle/list?id='.$circle->id.'">'.$circle->circle_name.'</a>」圈子', 100);
- return $this->success();
- }else{
- return $this->fail(200003, [], '您选择的'.env('circle_call', '圈子').'不存在!');
- }
- }
- /** 笔记审核
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function examine(Request $request){
- $uid = $request->uid;
- $posts_id = $request->posts_id;
- global $__MINI_GLOBAL_TENANT_ID__;
- if(_empty_($posts_id)){
- return $this->fail(200001);
- }
- $posts_id = _abs($posts_id);
- $flag = false;
- $the_post = WxPost::find($posts_id);
- if(_empty_($the_post)){
- return $this->fail(200003);
- }
- $post_user_id = $the_post->user_id;
- $circle_user_id = PostUtils::get_post_circle_user_id($posts_id);
- $is_examine = $the_post->is_examine;
- if(is_object_user_special($uid, $the_post->tenant_id)){
- // 管理员特权
- $flag = true;
- }else if($circle_user_id == $uid){
- // 圈主特权
- $flag = true;
- }else if($the_post->user_id == $uid){
- // 已经通过状态下, 自己可以驳回
- if($is_examine == 1){
- $flag = true;
- }
- }
- if(!$flag){
- return $this->fail(200000);
- }
- $user_name = WxUser::where('id', $uid)->value('user_name');
- $call_name = '管理员';
- if($circle_user_id == $uid){
- $call_name = env('circle_user_call', '圈主');
- }else if($post_user_id == $uid){
- $call_name = '自己';
- }
- if($is_examine == 0 || $is_examine == 2){
- // 发送通知
- WxPost::where('id',$posts_id)->update(['is_examine'=>1]);
- UserUtils::assistant_notice($post_user_id, '审核通过,您发表的笔记(id:<a href="/pages/sticky/sticky?id='.$posts_id.'">'.$posts_id.'</a>)已被'.$call_name.'「<a href="/pages/user/user?id='.$uid.'">'.$user_name.'</a>」审核通过');
- }else{
- WxPost::where('id',$posts_id)->update(['is_examine'=>2]);
- if($post_user_id != $uid){
- UserUtils::assistant_notice($post_user_id, '您发表的笔记(id:<a href="/pages/sticky/sticky?id='.$posts_id.'">'.$posts_id.'</a>)被'.$call_name.'「<a href="/pages/user/user?id='.$uid.'">'.$user_name.'</a>」驳回了');
- }
- }
- return $this->success();
- }
- /** 置顶
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function sticky(Request $request){
- $uid = $request->uid;
- $posts_id = $request->posts_id;
- $scene = $request->scene;
- global $__MINI_GLOBAL_IS_ADMIN_SUPER__;
- if($scene != 1){
- return $this->fail(700000);
- }
- if(_empty_($posts_id) || _empty_($scene)){
- return $this->fail(200001);
- }
- $posts_id = _abs($posts_id);
- if(!in_array($scene, [1, 5, 6, 8, 9, 10, 60001])){
- return $this->fail(200014);
- }
- // 权限验证
- // 圈主权限+管理员权限
- if($scene == 5 || $scene == 8){
- // 主页置顶
- $post_author = PostUtils::is_post_author($posts_id, $uid);
- if($post_author){
- }else{
- if(!$__MINI_GLOBAL_IS_ADMIN_SUPER__){
- return $this->fail(200000);
- }
- }
- }else if($scene == 6 || $scene == 60001){
- // 管理员或圈子管理员
- $circle_id = WxPost::where('id', $posts_id)->value('circle_id');
- $the_circle = WxCircle::find($circle_id);
- if(_empty_($the_circle)){
- return $this->fail(200003);
- }
- // 不是管理 也不是圈主
- if(!is_object_user_special($uid, $the_circle->tenant_id) && $the_circle->user_id != $uid){
- return $this->fail(200000);
- }
- }else{
- if(!$__MINI_GLOBAL_IS_ADMIN_SUPER__){
- return $this->fail(200000);
- }
- }
- if(PostsRepositores::addSticky($scene, $posts_id)){
- return $this->success();
- }else{
- return $this->fail(200002);
- }
- }
- public function posts_process(Request $request){
- $type = _empty_default_($request->type, '');
- if ($type == 'delete') {
- return $this->deletePosts($request);
- }else if ($type == 'sticky') {
- // 置顶
- return $this->sticky($request);
- }else if ($type == 'examine') {
- // 笔记审核
- return $this->examine($request);
- }else if ($type == 'move') {
- // 移动圈子
- return $this->move($request);
- }else if ($type == 'blur') {
- // 图片不适
- return $this->blur($request);
- }else if ($type == 'collect') {
- // 收藏
- return $this->collect($request);
- }else if ($type == 'like') {
- // 喜欢
- return $this->like($request);
- }else if ($type == 'add') {
- // 发帖
- return $this->addPost($request);
- }else if ($type == 'echo') {
- // 编辑回显
- return $this->echoPost($request);
- }else if ($type == 'update') {
- // 更新
- return $this->updatePost($request);
- }else if ($type == 'limit') {
- return $this->limit($request);
- }else if ($type == 'promotion_refresh_list') {
- return $this->promotion_refresh_list($request);
- }else if ($type == 'promotion_refresh_stop') {
- return $this->promotion_refresh_stop($request);
- }else if ($type == 'promotion_coin_pay') {
- return $this->promotion_coin_pay($request);
- }
- }
- private function promotion_coin_pay(Request &$request){
- $uid = $request->uid;
- $is_promotion_refresh = false;
- $post_id = _abs(_empty_default_($request->post_id, 0));
- if(_empty_($post_id)){
- return $this->fail(200004);
- }
- $time_list = _empty_default_($request->time_list, []);
- $index_option = _empty_default_($request->index, 0);
- if(_empty_default_($request->is_refresh, 0) == 1){
- if(_empty_($time_list)){
- return $this->fail(200004);
- }
- $is_promotion_refresh = true;
- }else{
- if(_empty_($index_option, true)){
- return $this->fail(200004);
- }
- }
- $the_post = WxPost::where('id', $post_id)->where([['is_examine' ,'=', 1], ['posts_state' , '=', 0]])->first();
- if(!$the_post){
- DB::rollBack();
- return $this->fail(200004, [], '笔记不存在或非正常推送状态');
- }
- if($is_promotion_refresh){
- if(!is_array($time_list)){
- return $this->fail(200004);
- }
- $the_order_price = bcdiv(Settings::get('app_promoted_post_refresh_cost', 1.0, true) * count($time_list), 1, 2);
- $order_info_des = '笔记推广自动刷新'.count($time_list).'次';
- }else{
- global $__MINI_GLOBAL_TENANT_ID__;
- $tmp_tenant_id = -1;
- if($__MINI_GLOBAL_TENANT_ID__ != $the_post->tenant_id){
- $tmp_tenant_id = $__MINI_GLOBAL_TENANT_ID__;
- $__MINI_GLOBAL_TENANT_ID__ = $the_post->tenant_id;
- }
- $post_options = Settings::get('app_promoted_post_options', [], true);
- if($tmp_tenant_id > 0){
- $__MINI_GLOBAL_TENANT_ID__ = $tmp_tenant_id;
- }
- if(_empty_($post_options) || !isset($post_options[$index_option])){
- DB::rollBack();
- return $this->fail(200004, [], '后台未配置index为'.$index_option.'的付费推广套餐');
- }
- $the_option = $post_options[$index_option];
- if($the_option['credit_type'] != 1){
- DB::rollBack();
- return $this->fail(200004, [], '该接口只能进行余额付费推广');
- }
- $the_order_price = $the_option['price'];
- $order_info_des = '笔记付费置顶'.$the_option['hour'].'小时';
- }
- $app_coin_pay_rate = Settings::get('app_coin_pay_rate', 100);
- $order_coins_num = (int)($app_coin_pay_rate * $the_order_price);
- DB::beginTransaction();
- try {
- // todo:
- if($is_promotion_refresh){
- $pay_res2 = UserUtils::update_user_coins($uid, 3, -$order_coins_num, '笔记(id: '.$post_id.')付费推广自动刷新'.count($time_list).'次('. $order_coins_num. Settings::get('app_coin_name', '硬币') . '抵扣了¥'.$the_order_price.'):金币-'.$order_coins_num);
- if($pay_res2){
- $insert_data = [];
- sort($time_list);
- foreach ($time_list as $timestap){
- $insert_data[] = [
- 'user_id' => $uid,
- 'post_id' => $post_id,
- 'expect_time' => Carbon::createFromTimestamp((int)($timestap / 1000)),
- 'refresh_time' => null,
- 'balance_cost' => 0,
- 'coin_cost' => (int)($order_coins_num / count($time_list)),
- 'status' => 0
- ];
- }
- WxPostsWeightRefresh::insert($insert_data);
- }else{
- DB::rollBack();
- return $this->fail(200011, [], Settings::get('app_coin_name', '硬币').'不足');
- }
- }else{
- $pay_res2 = UserUtils::update_user_coins($uid, 3, -$order_coins_num, '笔记(id: '.$post_id.')付费推广'.$the_option['tip'].'('. $order_coins_num. Settings::get('app_coin_name', '硬币') . '抵扣了¥'.$the_order_price.'):金币-'.$order_coins_num);
- if($pay_res2){
- $the_weight = $the_post->weight;
- if($the_weight < time()){
- $the_weight = time();
- }
- $the_weight += $the_option['hour'] * 3600;
- WxPost::withoutSyncingToSearch(function () use ($post_id, $the_weight) {
- WxPost::where('id', $post_id)->update(['weight'=>timetostr($the_weight)]);
- });
- }else{
- DB::rollBack();
- return $this->fail(200011, [], Settings::get('app_coin_name', '硬币').'不足');
- }
- }
- DB::commit();
- return $this->success();
- } catch (\Exception $e) {
- DB::rollBack();
- _logger_(__file__, __line__, $e->getMessage());
- return $this->fail(200002);
- }
- }
- private function promotion_refresh_stop(Request &$request){
- $uid = $request->uid;
- $posts_id = _abs(_empty_default_($request->posts_id, 0));
- if(_empty_($posts_id) || _empty_($uid)){
- return $this->fail(200001);
- }
- $the_post = WxPost::find($posts_id);
- if(_empty_($the_post)){
- return $this->fail(200003);
- }
- if($uid != $the_post->user_id && !is_object_user_special($uid, $the_post->tenant_id)){
- return $this->fail(200000);
- }
- $ids = [];
- $coin_total = 0;
- $balance_total = 0;
- $data = WxPostsWeightRefresh::where('user_id', $uid)->where('post_id', $posts_id)->where('status', 0)->get()->toArray();
- if(_empty_($data)){
- return $this->fail(200004, [], '已全部推广完成,无法中断');
- }
- foreach ($data as $item){
- $ids[] = $item['id'];
- $coin_total += $item['coin_cost'];
- $balance_total += $item['balance_cost'];
- }
- $coin_total = (int)($coin_total * 0.7);
- $balance_total = floor(($balance_total * 0.7 * 100)) / 100;
- DB::beginTransaction();
- try {
- // todo:
- WxPostsWeightRefresh::whereIn('id', $ids)->delete();
- if($coin_total > 0){
- UserUtils::update_user_coins($uid, 4, $coin_total, '收到「笔记 id: '.$the_post->id.'」自动刷新订单的金币抵扣退款' . Settings::get('app_coin_name', '硬币') . $coin_total);
- }
- if($balance_total >= 0.01){
- UserUtils::update_user_financial($uid, 33, $balance_total, '收到「<a href="/pages/sticky/sticky?id='.$the_post->id.'">笔记 id: '.$the_post->id.'</a>」自动刷新订单的退款,扣掉平台分成30%,您获得'.$balance_total.'余额。');
- }
- DB::commit();
- return $this->success();
- } catch (\Exception $e) {
- DB::rollBack();
- _logger_(__file__, __line__, $e->getMessage());
- return $this->fail(200006);
- }
- }
- private function promotion_refresh_list(Request &$request){
- $uid = $request->uid;
- $posts_id = _abs(_empty_default_($request->posts_id, 0));
- if(_empty_($posts_id) || _empty_($uid)){
- return $this->fail(200001);
- }
- $the_post = WxPost::find($posts_id);
- if(_empty_($the_post)){
- return $this->fail(200003);
- }
- if($uid != $the_post->user_id && !is_object_user_special($uid, $the_post->tenant_id)){
- return $this->fail(200000);
- }
- $data = WxPostsWeightRefresh::where('post_id', $posts_id)->orderBy('expect_time', 'asc')->get()->toArray();
- if(_empty_($data)){
- return $this->fail(200003);
- }
- $rest = 0;
- foreach ($data as $item){
- if($item['status'] === 0){
- $rest += 1;
- }
- }
- return $this->success(['list'=>$data, 'rest' => $rest, 'ok_count'=> count($data) - $rest, 'cancel' => ($the_post->user_id == $uid ? 1 : 0)]);
- }
- private function limit(Request &$request){
- $uid = $request->uid;
- $posts_id = _abs(_empty_default_($request->posts_id, 0));
- $days = _abs(_empty_default_($request->days, 1));
- $the_post = WxPost::find($posts_id);
- if(_empty_($the_post)){
- return $this->fail(200003);
- }
- if(!is_object_user_special($uid, $the_post->tenant_id)){
- return $this->fail(200000);
- }
- $weight = $the_post->weight;
- if($weight > time()){
- $weight = time();
- }
- $weight -= 86400 * $days;
- WxPost::withoutSyncingToSearch(function () use (&$the_post,$weight){
- WxPost::where('id', $the_post->id)->update(['weight'=>timetostr($weight)]);
- });
- // UserUtils::assistant_notice($the_post->user_id, '您发表的「<a href="/pages/sticky/sticky?id='.$the_post->id.'">笔记 id:'.$the_post->id.'</a>」被管理员「<a href="/pages/user/user?id='.$uid.'">'.UserUtils::get_cached_user_name($uid).' id:'.$uid.'</a>」首页限流');
- return $this->success();
- }
- private function echoPost(Request &$request){
- $uid = $request->uid;
- $posts_id = $request->posts_id;
- $editor_name = _empty_default_($request->editor_name, 'default');
- $the_post = WxPost::find($posts_id);
- if(_empty_($the_post)){
- return $this->fail(200003);
- }
- // 权限验证
- if(!is_object_user_special($uid, $the_post->tenant_id) && $the_post->user_id != $uid){
- return $this->fail(200000);
- }
- $the_post->posts_content_raw =html_entity_decode( _mini_phone(_mini_aite_replace(_mini_emoji($the_post->posts_content, true), true)) );
- if($the_post->circle_id > 0){
- $the_circle = WxCircle::find($the_post->circle_id);
- }
- if($the_post->video_id === Null){
- $the_post->video = WxPostsVideo::where('posts_id', $the_post->id)->first();//视频
- UpdatePostVideoIdJob::dispatch($the_post->id);
- }else if($the_post->video_id > 0){
- $the_post->video = WxPostsVideo::where('id', $the_post->video_id)->first();//视频
- }else if($the_post === 0){
- $the_post->video = null;
- }
- if($the_post->is_wechat_sph){
- $the_post->wechat_sph = get_post_meta($the_post->id, 'wechat_sph', 'j');
- }
- if(!_empty_($the_post->useds)){
- $the_post->used_goods = WxUsedGood::whereIn('id', $the_post->useds)->orderBy(DB::raw('FIND_IN_SET(id, "' . implode(",", $the_post->useds) . '"' . ")"))->get();
- if($the_post->used_goods){
- $the_post->used_goods->map(function ($used_good){
- if($used_good->image_urls){
- $used_good->pic = _array_key($used_good->image_urls[0], 'url', '') . '?imageMogr2/thumbnail/600x/format/webp/interlace/1';
- $used_good->pic_width = _array_key($used_good->image_urls[0], 'width', '');
- $used_good->pic_height = _array_key($used_good->image_urls[0], 'height', '');
- if($used_good->pic_width >= 0){
- $old_widht = $used_good->pic_width;
- $used_good->pic_width = 363;
- $used_good->pic_height = (int)( (363 * $used_good->pic_height) / $old_widht );
- }
- }
- $used_good->needed_count = WxUsedNeed::where('used_good_id', $used_good->id)->where('status', 1)->count();
- if(_empty_($used_good->needed_count)){
- $used_good->needed_count = 0;
- }
- return $used_good;
- });
- }
- }
- if( !_empty_($the_post->tags_id) ){
- $the_post->tags = WxTag::whereIn('id', explode(',', $the_post->tags_id))->get(['tags_name', 'id']);
- }else if($the_post->tags_id === ''){
- $the_post->tags = null;
- }else if($the_post->tags_id === '0'){
- $the_post->tags = PostsRepositores::getPostTags($the_post->id);
- UpdatePostTagIdJob::dispatch($the_post->id);
- }
- if( !_empty_($the_post->goods_id) ){
- $the_post->goods = WxShopGoods::whereIn('id', explode(',', $the_post->goods_id))->get(['id', 'pic', 'name', 'credit_type', 'intro', 'price', 'vip_price', 'tk_platform_id', 'buys']);
- }else if($the_post->goods_id === ''){
- $the_post->goods = null;
- }else if($the_post->goods_id === '0'){
- $the_post->goods = PostsRepositores::getPostGoods($the_post->id);
- UpdatePostGoodsIdJob::dispatch($the_post->id);
- }
- if( !_empty_($the_post->sounds_id) ){
- $the_post->sounds = WxPostsSound::whereIn('id', explode(',', $the_post->sounds_id))->get();
- }else if($the_post->sounds_id === ''){
- $the_post->sounds = null;
- }else if($the_post->sounds_id === '0'){
- $the_post->sounds = PostsRepositores::getPostSounds($the_post->id);
- UpdatePostSoundsIdJob::dispatch($the_post->id);
- }
- $address_obj = [];
- if($the_post->address_id > 0){
- $address_obj = WxPostsAddress::where('id', $the_post->address_id)->first();
- }
- $pay_content_obj_ = [];
- if($the_post->pay_content_id > 0){
- $pay_content_obj_ = WxPostsPayContent::find($the_post->pay_content_id);
- }
- if( !_empty_($the_post->files_id) ){
- $the_post->files = WxPostsFile::whereIn('id', explode(',', $the_post->files_id))->get();
- }else if($the_post->files_id === ''){
- $the_post->files = null;
- }else if($the_post->files_id === '0'){
- $the_post->files = PostsRepositores::getPostFiles($the_post->id);
- UpdatePostFilesIdJob::dispatch($the_post->id);
- }
- if($the_post->has_fields === 1) {
- $the_post->fields = WxPostsField::find($the_post->id);
- }else if($the_post->has_fields === null){
- $the_post->fields = WxPostsField::find($the_post->id);
- UpdatePostFieldsJob::dispatch($the_post->id);
- }
- if($editor_name == 'default'){
- $selectUseds = [];
- $post_type = PostUtils::post_type($the_post);
- if($post_type == 'single'){
- }else{
- $the_post->posts_content_raw = str_replace(['<br>', '<br/>'], "\n", $the_post->posts_content_raw);
- }
- $circle = [
- 'id' => 0,
- 'circle_name' => ''
- ];
- $tags = [];
- $goods = [];
- $address = [];
- if($address_obj){
- $address['latitude'] = $address_obj->latitude;
- $address['longitude'] = $address_obj->longitude;
- $address['address_name'] = $address_obj->address_name;
- $address['address_detailed'] = $address_obj->address_detailed;
- }
- if(!_empty_($the_post->tags)){
- $the_post->tags->map(function ($tag_obj) use (&$tags){
- $tags[] = [
- 'id' => $tag_obj->id,
- 'tags_name' => $tag_obj->tags_name
- ];
- });
- }
- if($the_post->circle_id > 0){
- $circle = [
- 'id' => $the_circle->id,
- 'circle_name' => $the_circle->circle_name
- ];
- }
- $image_urls = [];
- WxPostsImg::where('posts_id', $the_post->id)->get(['id','img_url', 'posts_id','width', 'height'])->map(function ($img_obj) use (&$image_urls){
- $image_urls[] = [
- 'url' => $img_obj->img_url
- ];
- });
- // 处理二手
- if($the_post->used_goods){
- $the_post->used_goods->map(function ($used_good) use (&$selectUseds){
- $selectUseds[] = [
- 'id' => $used_good->id,
- 'pic' => $used_good->pic,
- 'title' => $used_good->title,
- 'price' => $used_good->price,
- 'needed_count' => $used_good->needed_count,
- ];
- });
- }
- if($the_post->goods){
- $the_post->goods->map(function ($good_obj) use (&$goods){
- $goods[] = [
- 'id' => $good_obj->id,
- 'name' => $good_obj->name,
- 'pic' => $good_obj->pic ? $good_obj->pic[0] : []
- ];
- });
- }
- $pay_content_obj = [
- 'words_percent' => 100,
- 'is_file' => 0,
- 'is_img' => 0,
- 'is_video' => 0,
- 'credit_type' => 0,
- 'hidden' => '',
- 'price' => 0,
- 'id' => 0
- ];
- if($pay_content_obj_ && $pay_content_obj_->id > 0){
- $pay_content_obj['id'] = $pay_content_obj_->id;
- $pay_content_obj['words_percent'] = $pay_content_obj_->words_percent;
- $pay_content_obj['is_file'] = $pay_content_obj_->is_file;
- $pay_content_obj['is_img'] = $pay_content_obj_->is_img;
- $pay_content_obj['is_video'] = $pay_content_obj_->is_video;
- $pay_content_obj['credit_type'] = $pay_content_obj_->credit_type;
- $pay_content_obj['hidden'] = $pay_content_obj_->hidden;
- $pay_content_obj['price'] = $pay_content_obj_->price;
- }
- $video_url = '';
- $video_thumb_url = '';
- $video_height = 0;
- $video_width = 0;
- if($the_post->video){
- $video_url = $the_post->video->video_url;
- $video_thumb_url = $the_post->video->video_thumb_url;
- $video_height = $the_post->video->video_height;
- $video_width = $the_post->video->video_width;
- }
- $sph_video_feed_token = '';
- $sph_image_urls = [];
- if($the_post->wechat_sph && _array_key($the_post->wechat_sph, 'feed_token', '')){
- $sph_video_feed_token = $the_post->wechat_sph['feed_token'];
- $sph_image_urls = [['url'=>$the_post->wechat_sph['img']]];
- }
- $upload_files = [];
- if($the_post->files){
- $the_post->files->map(function ($file_obj) use (&$upload_files){
- $upload_files[] = [
- 'id' => $file_obj->id,
- 'name' => $file_obj->name
- ];
- });
- }
- $sounds_files = [];
- if($the_post->sounds){
- $the_post->sounds->map(function ($sound_obj) use (&$sounds_files){
- $sounds_files[] = [
- 'id' => $sound_obj->id,
- 'name' => $sound_obj->name
- ];
- });
- }
- $contact_phone = '';
- if($the_post->fields){
- $contact_phone = $the_post->fields->contact_phone;
- }
- $selectVoter = null;
- if($the_post->voter_id > 0){
- $selectVoter = WxVoter::where('id', $the_post->voter_id)->first(['id', 'user_id', 'master_user_avatar', 'master_user_name', 'title', 'banners']);
- }
- return $this->success([
- 'id' => $the_post->id,
- 'editer' => $post_type == 'single' ? 'imagetext' : 'simple',
- 'posts_title' => $the_post->posts_title,
- 'imagetext_content' => $post_type == 'single' ? $the_post->posts_content_raw : '',
- 'textinput' => $post_type == 'single' ? '' : $the_post->posts_content_raw,
- 'selectUseds' => $selectUseds,
- 'image_urls' => $image_urls,
- 'circle' => $circle,
- 'tags' => $tags,
- 'goods' => $goods,
- 'location' => $address,
- 'pay_content_obj' => $pay_content_obj,
- 'video_url' => $video_url,
- 'video_thumb_url' => $video_thumb_url,
- 'video_height' => $video_height,
- 'video_width' => $video_width,
- 'sph_video_feed_token' => $sph_video_feed_token,
- 'sph_image_urls' => $sph_image_urls,
- 'upload_files' => $upload_files,
- 'sounds_files' => $sounds_files,
- 'contact_phone' => $contact_phone,
- 'is_anonymous' => $the_post->is_anonymous,
- 'selectVoter' => $selectVoter
- ]);
- }
- }
- /**
- * 删除
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function deletePosts(Request $request)
- {
- $uid = $request->uid;
- $posts_id = $request->posts_id;
- global $__MINI_GLOBAL_TENANT_ID__, $__MINI_GLOBAL_IS_ADMIN_SUPER__;
- if(_empty_($posts_id)){
- return $this->fail(200001);
- }
- $posts_id = _abs($posts_id);
- // $flag = false;
- $flag = true;
- $the_post = WxPost::find($posts_id);
- if(_empty_($the_post)){
- return $this->fail(200003);
- }
- if(is_object_user_special($uid, $the_post->tenant_id)){
- // 管理特权
- $flag = true;
- }else if(PostUtils::get_post_circle_user_id($posts_id) == $uid){
- // 圈主特权
- $flag = true;
- }else if($the_post->user_id == $uid){
- // 自己删除
- $flag = true;
- }
- if(!$flag){
- return $this->fail(200000);
- }
- $r = PostsRepositores::deletePosts($posts_id, $the_post->user_id == $uid ? 1 : 2);
- if($r){
- if($the_post->circle_id){
- Cache::forget('circle:postCount:'.$the_post->circle_id);
- ForgetCircleUnreadCountJob::dispatch($the_post->circle_id);
- }
- // todo: 修改图片状态
- return $this->success();
- }else{
- return $this->fail(200002);
- }
- }
- /**
- * 关注用户
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function followUser(Request $request)
- {
- $uid = $request->uid;
- _limit_user('follow:user', $uid, 20);
- $user_follow_id = $request->posts_user_id;
- if(_empty_($user_follow_id)){
- return $this->fail(200001);
- }
- $res = UserUtils::follow_user($uid, $user_follow_id);
- if($res['code'] == 1){
- return $this->success([], $res['message']);
- }else{
- return $this->fail($res['message']);
- }
- }
- /**
- * 笔记详情
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function postsDetail(Request $request)
- {
- $uid = $request->uid;
- $posts_id = $request->posts_id;
- if(_empty_($posts_id)){
- return $this->fail(200001);
- }
- try{
- $posts_id = _abs($posts_id);
- }catch (\Exception $e){
- _logger_(__file__, __line__, $e->getMessage().'||||'.$posts_id);
- return $this->fail(200004);
- }
- $data = (new Model())->where('id', $posts_id)->get();
- if($data->isEmpty()){
- return $this->fail(200003);
- }
- $the_post = $data->get(0);
- // 锁定或下架
- if($the_post->posts_state == 1 || $the_post->posts_state == 2){
- // 已经下架了
- return $this->fail(416005);
- }
- // 待审或驳回
- if($the_post->is_examine == 0 || $the_post->is_examine == 2){
- if($uid == $the_post->user_id || is_object_user_special($uid, $the_post->tenant_id) || PostUtils::get_post_circle_user_id($posts_id) == $uid){
- }else{
- if($the_post->is_examine == 0){
- // 待审核
- return $this->fail(416006);
- }else{
- // 被驳回
- $overrule_content = '笔记被驳回!无法查看';
- if($the_post->overrule_content){
- $overrule_content = '笔记被驳回,'.$the_post->overrule_content;
- }
- return $this->fail(416007, [], $overrule_content);
- }
- }
- }
- if($data){
- $data = PostsRepositores::postsParame($data, $uid, 9);//文章详情
- if($uid > 0){
- update_user_visit($uid, 1, $posts_id);
- }
- // print_r('<pre>');
- // print_r($data[0]);exit;
- $data[0]['posts_content'] = $data[0]['posts_content_origin'];
- // $data->posts_content = $data->posts_content_origin;
- return $this->success($data);
- }
- return $this->fail(200003);
- }
- /**
- * 相关笔记
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function postsRelevant(Request $request){
- $posts_id = $request->posts_id;
- $uid = $request->uid;
- if(_empty_($posts_id)){
- return $this->fail(200001);
- }
- $posts_id = _abs($posts_id);
- if(!SearchUtils::is_use_es()){
- return $this->fail(700000);
- }
- $data = PostsRepositores::relevantPosts($posts_id, $uid);
- if($data){
- return $this->success($data);
- }else{
- return $this->fail(200003);
- }
- }
- /**
- * 通过圈子获取笔记
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function postsByCircle(Request $request)
- {
- global $__MINI_GLOBAL_SCENE__;
- $circle_id = _abs($request->circle_id);
- $type = $request->type;
- $limit = $request->input('limit', 10);
- $uid = $request->uid;
- $page = $request->page;
- $tags = _empty_default_($request->tags, null);
- $sort = _empty_default_($request->sort, 0);
- $city = _empty_default_($request->city, '');
- if(_empty_($city) || $city == '全国' || $city == '重新定位' || $city == '定位中'){
- $city = '';
- }
- $is_tenant = _empty_default_($request->isTenant, 0);
- if(_empty_($is_tenant)){
- $is_tenant = false;
- }else{
- if($is_tenant == 2){
- if($__MINI_GLOBAL_SCENE__ == 6){
- $is_tenant = Cache::remember('circle:default:is:tenant:'.$circle_id, 36000, function () use (&$circle_id){
- $circle = WxCircle::find($circle_id);
- if($circle){
- if($circle->tenant_show == -1 && $circle->is_tenant_select == 1){
- return 1;
- }
- }
- return 0;
- }) == 1;
- }else{
- $is_tenant = false;
- }
- }else{
- $is_tenant = true;
- }
- }
- if(!in_array($sort, [0, 1, 2])){
- $sort = 0;
- }
- if(!is_array($tags)){
- $tags = json_decode($tags, true);
- }
- if(_empty_($tags)){
- $tags = null;
- }
- return $this->success(PostsRepositores::postsByCircleId($circle_id, $type, $limit, $uid, $page, $tags, $sort, $city, $is_tenant));
- }
- /**
- * 通过话题获取笔记列表(瀑布流用)
- * @param Request $request
- */
- public function listByTagId(Request $request)
- {
- $tagId = $request->tag_id;
- $page = $request->page;
- $limit = 10;
- $uid = $request->uid;
- global $__MINI_GLOBAL_TENANT_ID__,$__MINI_GLOBAL_DEVICE__,$__MINI_GLOBAL_MODE__;
- // 获取全部笔记
- if (_empty_($tagId)) {
- if(true){
- $query = WxPost::where([['is_examine' ,'=', 1], ['posts_state' , '=', 0], ['img_count', '>', 0 ]]);
- $query = $query->where('tenant_id', $__MINI_GLOBAL_TENANT_ID__);
- // 控制视频隐藏
- if($__MINI_GLOBAL_DEVICE__ != 'mp'){
- global $__MINI_GLOBAL_FRONT_VERSION__;
- // todo: 临时
- if($__MINI_GLOBAL_FRONT_VERSION__ >= '1.2.2.24'){
- }else {
- $query = $query->where('is_wechat_sph', 0);
- }
- }
- if($__MINI_GLOBAL_MODE__ == 'examine'){
- $query = $query->where('post_type', '<>', 'video');
- }
- $data = $query->orderBy('degree', 'desc')->simplePaginate($limit);
- }else{
- $query = WxPost::where([['is_examine' ,'=', 1], ['posts_state' , '=', 0], ['img_count', '>', 0 ]]);
- $query = $query->where('tenant_id', $__MINI_GLOBAL_TENANT_ID__);
- // 控制视频隐藏
- if($__MINI_GLOBAL_DEVICE__ != 'mp'){
- global $__MINI_GLOBAL_FRONT_VERSION__;
- // todo: 临时
- if($__MINI_GLOBAL_FRONT_VERSION__ >= '1.2.2.24'){
- }else {
- $query = $query->where('is_wechat_sph', 0);
- }
- }
- if($__MINI_GLOBAL_MODE__ == 'examine'){
- $query = $query->where('post_type', '<>', 'video');
- }
- $data = $query->orderBy('id', 'desc')->simplePaginate($limit);
- }
- }else{
- if(true){
- $postIdsArr = WxPostsTag::where('tags_id', $tagId)->pluck('posts_id');
- $query = WxPost::whereIn('id', $postIdsArr)->where([['is_examine' ,'=', 1], ['posts_state' , '=', 0], ['img_count', '>', 0 ]]);
- $query = $query->where('tenant_id', $__MINI_GLOBAL_TENANT_ID__);
- // 控制视频隐藏
- if($__MINI_GLOBAL_DEVICE__ != 'mp'){
- global $__MINI_GLOBAL_FRONT_VERSION__;
- // todo: 临时
- if($__MINI_GLOBAL_FRONT_VERSION__ >= '1.2.2.24'){
- }else {
- $query = $query->where('is_wechat_sph', 0);
- }
- }
- if($__MINI_GLOBAL_MODE__ == 'examine'){
- $query = $query->where('post_type', '<>', 'video');
- }
- $data = $query->orderBy('weight', 'desc')->simplePaginate($limit);
- }else{
- $postIdsArr = WxPostsTag::where('tags_id', $tagId)->pluck('posts_id');
- $query = WxPost::whereIn('id', $postIdsArr)->where([['is_examine' ,'=', 1], ['posts_state' , '=', 0], ['img_count', '>', 0 ]]);
- $query = $query->where('tenant_id', $__MINI_GLOBAL_TENANT_ID__);
- // 控制视频隐藏
- if($__MINI_GLOBAL_DEVICE__ != 'mp'){
- global $__MINI_GLOBAL_FRONT_VERSION__;
- // todo: 临时
- if($__MINI_GLOBAL_FRONT_VERSION__ >= '1.2.2.24'){
- }else {
- $query = $query->where('is_wechat_sph', 0);
- }
- }
- if($__MINI_GLOBAL_MODE__ == 'examine'){
- $query = $query->where('post_type', '<>', 'video');
- }
- $data = $query->orderBy('id', 'desc')->simplePaginate($limit);
- }
- }
- PostUtils::reset_loop();
- $data->map(function ($v, $k) use ($uid){
- return PostUtils::WaterfallProcess($k, $v,19);
- });
- return $this->success($data);
- }
- /**
- * 通过话题获取笔记列表
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- */
- public function listByTagIdV2(Request $request)
- {
- $tagId = $request->tag_id;
- $page = $request->page;
- $limit = 6;
- $uid = $request->uid;
- $sort_by = _empty_default_($request->sort_by, 'id');
- if(!in_array($sort_by, ['id', 'hot'])){
- return $this->fail(200004);
- }
- global $__MINI_GLOBAL_DEVICE__,$__MINI_GLOBAL_MODE__,$__MINI_GLOBAL_SCENE__,$__MINI_GLOBAL_TENANT_ID__;
- $is_tenant = _empty_default_($request->isTenant, false);
- if(_empty_($is_tenant)){
- $is_tenant = false;
- }else{
- $is_tenant = true;
- }
- // 获取全部笔记
- if (_empty_($tagId)) {
- $data = (new Model())
- ->where('is_examine', 1)
- ->where('posts_state', 0);
- if($is_tenant){
- $data = $data->where('tenant_id', $__MINI_GLOBAL_TENANT_ID__);
- }
- $not_like_post_set = get_user_meta($uid, 'feedback:notlike:post:set', 'j');
- $not_like_user_set = get_user_meta($uid, 'feedback:notlike:user:set', 'j');
- if(!_empty_($not_like_user_set)){
- $data = $data->whereNotIn('user_id', $not_like_user_set);
- }
- if(!_empty_($not_like_post_set)){
- $data = $data->whereNotIn('id', $not_like_post_set);
- }
- // 控制视频隐藏
- if($__MINI_GLOBAL_DEVICE__ != 'mp'){
- global $__MINI_GLOBAL_FRONT_VERSION__;
- // todo: 临时
- if($__MINI_GLOBAL_FRONT_VERSION__ >= '1.2.2.24'){
- }else {
- $data = $data->where('is_wechat_sph', 0);
- }
- }
- if($__MINI_GLOBAL_MODE__ == 'examine'){
- $data = $data->where('post_type', '<>', 'video');
- }
- if($sort_by == 'id'){
- $data = $data->orderBy('id', 'desc');
- }else if($sort_by == 'hot'){
- $data = $data->orderBy('degree', 'desc')->orderBy('id', 'desc');
- }
- $data = $data->simplePaginate($limit);
- if($is_tenant){
- PostUtils::$force_show_multi_site = false;
- }
- $data = PostsRepositores::postsParame($data, $uid);//文章详情
- return $this->success($data);
- }
- $postIdsArr = WxPostsTag::where('tags_id', $tagId)->pluck('posts_id');
- $data = (new Model())
- ->where('is_examine', 1)
- ->where('posts_state', 0)
- ->whereIn('id', $postIdsArr);
- if($is_tenant){
- $data = $data->where('tenant_id', $__MINI_GLOBAL_TENANT_ID__);
- }
- $not_like_post_set = get_user_meta($uid, 'feedback:notlike:post:set', 'j');
- $not_like_user_set = get_user_meta($uid, 'feedback:notlike:user:set', 'j');
- if(!_empty_($not_like_user_set)){
- $data = $data->whereNotIn('user_id', $not_like_user_set);
- }
- if(!_empty_($not_like_post_set)){
- $data = $data->whereNotIn('id', $not_like_post_set);
- }
- // 控制视频隐藏
- if($__MINI_GLOBAL_DEVICE__ != 'mp'){
- global $__MINI_GLOBAL_FRONT_VERSION__;
- // todo: 临时
- if($__MINI_GLOBAL_FRONT_VERSION__ >= '1.2.2.24'){
- }else {
- $data = $data->where('is_wechat_sph', 0);
- }
- }
- if($__MINI_GLOBAL_MODE__ == 'examine'){
- $data = $data->where('post_type', '<>', 'video');
- }
- if($sort_by == 'id'){
- $data = $data->orderBy('id', 'desc');
- }else if($sort_by == 'hot'){
- $data = $data->orderBy('degree', 'desc')->orderBy('id', 'desc');
- }
- $data = $data->simplePaginate($limit);
- if($is_tenant){
- PostUtils::$force_show_multi_site = false;
- }
- $data = PostsRepositores::postsParame($data, $uid, $__MINI_GLOBAL_SCENE__);//文章详情
- return $this->success($data);
- }
- /**
- * 审核笔记
- * @param Request $request
- */
- public function auditPosts(Request $request)
- {
- $uid = $request->uid;
- $postsId = $request->id;
- $type = $request->type;
- $reject_msg = $request->reject_msg;
- if ($type == 0) {
- $result = WxPost::where('id', $postsId)->update(['is_examine' => 1]);
- if ($result) {
- $userId = WxPost::where('id', $postsId)->value('user_id');
- // 发送通知
- UserUtils::assistant_notice($userId, '您发表的笔记(id:<a href="/pages/sticky/sticky?id='.$postsId.'">'.$postsId.'</a>)已经审核通过');
- }
- } elseif ($type == 1) {
- $result = WxPost::where('id', $postsId)->update(['is_examine' => 2]);
- if ($result) {
- $userId = WxPost::where('id', $postsId)->value('user_id');
- // 发送通知
- UserUtils::assistant_notice($userId, '您发表的笔记(id:<a href="/pages/sticky/sticky?id='.$postsId.'">'.$postsId.'</a>)被驳回了,驳回原因:' . $reject_msg);
- }
- }
- return $this->success();
- }
- /**
- * 获取用户不喜欢的笔记
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- * @throws \Exception
- */
- public function userBlack(Request $request){
- $uid = $request->uid;
- $post_set = get_user_meta($uid, 'feedback:notlike:post:set', 'j');
- if($post_set){
- $post_set = array_reverse($post_set);
- $data = WxPost::whereIn('id', $post_set)
- ->orderBy(DB::raw('FIND_IN_SET(id, "' . implode(",", $post_set) . '"' . ")"))->simplePaginate(10, FieldUtils::postInfoColums());
- PostUtils::reset_loop();
- $data->map(function ($v, $k) use ($uid){
- return PostUtils::WaterfallProcess($k, $v,80);
- });
- return $this->success($data);
- }else{
- return $this->fail(200003);
- }
- }
- public function promotion(Request $request){
- global $__MINI_GLOBAL_TENANT_ID__;
- $uid = $request->uid;
- $post_id = _empty_default_($request->post_id, 0);
- if(_empty_($post_id)){
- return $this->fail(200001);
- }
- $post_id = _abs((int)$post_id);
- if (request()->method() === 'GET') {
- // 处理GET请求
- $post = WxPost::find($post_id);
- $posts_content = _mini_phone(_mini_emoji(_mini_aite_replace($post->posts_content), true), true);
- if($posts_content){
- $s_content = preg_replace("/<(img|video).*?src[^\'\"]+[\'\"]([^\"\']+)[^>]+>/is", '', $posts_content);
- $s_content =trim_all_space(strip_tags(html_entity_decode($s_content)), true);
- }
- $post_title = PostUtils::get_the_title($s_content, $post->id);
- PostUtils::mediaProcess($post, $uid, 90004, 0, true);
- global $__MINI_GLOBAL_TENANT_ID__;
- $tmp_tenant_id = -1;
- if($__MINI_GLOBAL_TENANT_ID__ != $post->tenant_id){
- $tmp_tenant_id = $__MINI_GLOBAL_TENANT_ID__;
- $__MINI_GLOBAL_TENANT_ID__ = $post->tenant_id;
- }
- $post_options = Settings::get('app_promoted_post_options', ($__MINI_GLOBAL_TENANT_ID__ > 0 ? Settings::get('app_promoted_post_options', []) : []), true);
- if($tmp_tenant_id > 0){
- $__MINI_GLOBAL_TENANT_ID__ = $tmp_tenant_id;
- }
- return $this->success(
- [
- 'title' => $post_title,
- 'img' => $post->img,
- 'created_at' => $post->created_at->format('Y-m-d H:i:s'),
- 'author' => UserUtils::get_cached_user($post->user_id, false, false, $post->is_anonymous == 1),
- 'is_promoted' => $post->weight > time(),
- 'weight' => timetostr($post->weight),
- 'selectList' => $post_options,
- 'refreshCost' => Settings::get('app_promoted_post_refresh_cost', ($__MINI_GLOBAL_TENANT_ID__ > 0 ? Settings::get('app_promoted_post_refresh_cost', 1.0) : 1.0), true),
- 'rest_coin' => UserUtils::user_coins($uid)
- ]
- );
- } else{
- }
- }
- /**
- * 笔记反馈
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- * @throws \Exception
- */
- public function feedback(Request $request){
- $uid = $request->uid;
- $post_id = $request->posts_id;
- // 1: 不喜欢该笔记 2:不喜欢该作者
- $type = $request->type;
- if(_empty_($post_id) || _empty_($type)){
- return $this->fail(200001);
- }
- if(!in_array($type, [1, 2])){
- return $this->fail(200004);
- }
- if($type == 1){
- $post_set = get_user_meta($uid, 'feedback:notlike:post:set', 'j');
- if(!in_array($post_id, $post_set)){
- $post_set[] = $post_id;
- update_user_meta($uid, 'feedback:notlike:post:set', array_unique($post_set), 'j');
- return $this->success([], 200, '标记为不喜欢,将不再展示该笔记');
- }else{
- // 要删除的特定值
- $post_set = array_filter($post_set, function ($value) use ($post_id) {
- return $value != $post_id;
- });
- update_user_meta($uid, 'feedback:notlike:post:set', array_unique($post_set), 'j');
- return $this->success([], 200010, '已取消标记');
- }
- }else if($type == 2){
- $author_id = WxPost::where('id', $post_id)->value('user_id');
- if($author_id){
- $user_set = get_user_meta($uid, 'feedback:notlike:user:set', 'j');
- if(!in_array($author_id, $user_set)){
- $user_set[] = $author_id;
- update_user_meta($uid, 'feedback:notlike:user:set', array_unique($user_set), 'j');
- return $this->success(['post_user_id'=>$author_id], 200, '标记为不喜欢,将不再展示该作者');
- }else{
- // 要删除的特定值
- $user_set = array_filter($user_set, function ($value) use ($author_id) {
- return $value != $author_id;
- });
- update_user_meta($uid, 'feedback:notlike:user:set', array_unique($user_set), 'j');
- return $this->success([], 200010, '已取消标记');
- }
- }else{
- return $this->fail(200003, [], '不存在该篇笔记');
- }
- }
- return $this->fail(200003, [], 'type参数错误');
- }
- /**
- * 笔记分享
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- * @throws \Exception
- */
- public function share(Request $request){
- $uid = $request->uid;
- $posts_id_ = $request->posts_id;
- global $__MINI_GLOBAL_DEVICE__;
- if(is_string($posts_id_)){
- $posts_id_ = (int)$posts_id_;
- }
- $post_id = _abs($posts_id_);
- if(_empty_($post_id)){
- return $this->fail(200001);
- }
- $post = WxPost::find($post_id);
- $post_user_id = $post->user_id;
- $refer_id = $post->refer_id;
- $posts_content = $post->posts_content;
- if($posts_content){
- $s_content = preg_replace("/<(img|video).*?src[^\'\"]+[\'\"]([^\"\']+)[^>]+>/is", '', $posts_content);
- $s_content =trim_all_space(strip_tags(html_entity_decode($s_content)), true);
- }
- $post_title = $post->posts_title ?: PostUtils::get_the_title($s_content, $post->id);
- PostUtils::mediaProcess($post, $uid, 90003, 0, true);
- $post->img = Utils::imgWithStyle($post->img, 0, false, true).'?imageMogr2/thumbnail/200x200/crop/200x200/gravity/center/format/jpg/interlace/0/quality/100';
- $is_mini_admin = is_object_user_special($uid, $post->tenant_id);
- $result = [
- 'user' => [],
- 'url' => '',
- 'social' => [
- ],
- 'other' => [],
- // 临时加下
- 'current_page' => 1
- ];
- if($uid && $uid > 0){
- if(!is_mini_examine_mode(11)){
- $data = DB::table('wx_user')
- ->whereIn('id', function ($query) use ($uid) {
- $query->select('object_id')
- ->from('wx_chat')
- ->where('user_id', $uid)
- ->groupBy('object_id')
- ->orderByDesc('created_at');
- })->simplePaginate(10, FieldUtils::userInfoColums());
- if($data->isEmpty()){
- $data = WxUser::where('is_official', 1)->simplePaginate(10, FieldUtils::userInfoColums());
- }
- $result['user'] = $data;
- }
- }
- global $__MINI_GLOBAL_TENANT_ID__;
- if(Settings::get('app_h5_home', '')){
- $result['url'] = Settings::get('app_h5_home', '').'/#/pages/sticky/sticky?id='.$post_id . '&fph=1&from_user=' .$uid. '&tenant=' . $__MINI_GLOBAL_TENANT_ID__;
- }else{
- $result['url'] = env('APP_URL');
- }
- $the_only_path = '/pages/sticky/sticky?id=' . $post->id. '&fph=1&from_user=' .$uid. '&tenant=' . $__MINI_GLOBAL_TENANT_ID__;
- $share_types = Settings::get('app_post_social_share_types', []);
- foreach (['refer', 'wechat', 'timeline', 'qq', 'qzone', 'weibo'] as $key){
- if(!in_array($key, $share_types)){
- continue;
- }
- if($key == 'refer'){
- if($refer_id > 0){
- continue;
- }else{
- $result['social'][] = [
- 'action' => 'refer',
- 'color' => Settings::get('--color-primary', '#FC3A72'),
- 'text' => '站内转发',
- 'icon' => 'mini-icon mini-zhanneizhuanfa',
- 'unicode' => 'e699'
- ];
- }
- }else if($key == 'wechat'){
- $result['social'][] = [
- 'action' => 'wechat',
- 'color' => '#57be6a',
- 'text' => '微信好友',
- 'icon' => 'mini-icon mini-weixin',
- 'unicode' => 'e60b',
- 'share' => json_encode([
- 'provider' => 'weixin',
- 'type' => _empty_(Settings::get('app_meta_appid', '')) ? 0 : 5,
- 'title' => $post_title,
- 'scene' => 'WXSceneSession',
- 'href' => $result['url'],
- 'imageUrl' => $post->img,
- 'miniProgram' => [
- 'id' => Settings::get('app_meta_appid', ''),
- 'path' => $the_only_path,
- 'type' => 0,
- 'webUrl' => $result['url']
- ]
- ]),
- ];
- }else if($key == 'timeline'){
- if($__MINI_GLOBAL_DEVICE__ != 'mp'){
- $result['social'][] = [
- 'action' => 'timeline',
- 'color' => '#80cc46',
- 'text' => '朋友圈',
- 'icon' => 'mini-icon mini-pengyouquan1',
- 'unicode' => 'e669',
- 'share' => json_encode([
- 'provider' => 'weixin',
- 'type' => 0,
- 'title' => $post_title,
- 'summary' => $s_content,
- 'scene' => 'WXSceneTimeline',
- 'href' => $result['url'],
- 'imageUrl' => $post->img,
- 'miniProgram' => [
- 'id' => Settings::get('app_meta_appid', ''),
- 'path' => $the_only_path,
- 'type' => 0,
- 'webUrl' => $result['url']
- ]
- ])
- ];
- }
- }else if($key == 'qq'){
- if(!_empty_(Settings::get('app_qq_app_appid', ''))){
- if($__MINI_GLOBAL_DEVICE__ != 'mp') {
- $result['social'][] = [
- 'action' => 'qq',
- 'color' => '#54b4ef',
- 'text' => 'QQ好友',
- 'icon' => 'mini-icon mini-qq1',
- 'unicode' => 'e66c',
- 'share' => json_encode([
- 'provider' => 'qq',
- 'type' => 1,
- 'title' => $post_title,
- 'summary' => $s_content,
- 'href' => $result['url'],
- 'imageUrl' => $post->img
- ])
- ];
- }
- }
- }else if($key == 'qzone'){
- if(!_empty_(Settings::get('app_qq_app_appid', ''))){
- if($__MINI_GLOBAL_DEVICE__ != 'mp') {
- $result['social'][] = [
- 'action' => 'qzone',
- 'color' => '#f7cf46',
- 'text' => 'QQ空间',
- 'icon' => 'mini-icon mini-Rrl_s_112',
- 'unicode' => 'e62a',
- 'share' => json_encode([
- 'provider' => 'qq',
- 'type' => 1,
- 'title' => $post_title,
- 'href' => $result['url'],
- 'imageUrl' => $post->img
- ])
- ];
- }
- }
- }else if($key == 'weibo'){
- if(!_empty_(Settings::get('app_weibo_app_appid', ''))){
- if($__MINI_GLOBAL_DEVICE__ != 'mp') {
- $result['social'][] = [
- 'action' => 'weibo',
- 'color' => '#d4382a',
- 'text' => '微博',
- 'icon' => 'mini-icon mini-weibo',
- 'unicode' => 'e73c',
- 'share' => json_encode([
- 'provider' => 'sinaweibo',
- 'type' => 0,
- 'title' => $post_title,
- 'href' => $result['url'],
- 'imageUrl' => $post->img
- ])
- ];
- }
- }
- }
- }
- $system_types = Settings::get('app_post_social_system_types', ['showCode', 'copyUrl', 'feedback-notlike-1', 'video-url','promotion', 'report' ]);
- // promotion
- foreach (['showCode', 'edit', 'copyUrl', 'feedback-notlike-1', 'video-url', 'promotion', 'report', 'poster2'] as $key){
- if(!in_array($key, $system_types)){
- continue;
- }
- if($key == 'showCode'){
- $result['other'][] = [
- 'text' => '生成海报',
- 'icon' => 'mini-icon mini-shengchenghaibao',
- 'action' => 'showCode',
- 'unicode' => 'e697',
- ];
- }else if($key == 'poster2'){
- $result['other'][] = [
- 'text' => '小海报',
- 'icon' => 'mini-icon mini-shengchenghaibao',
- 'unicode' => 'e697',
- 'action' => 'poster2'
- ];
- }else if($key == 'edit'){
- if($refer_id > 0 || $post->vote_id > 0){
- }else{
- if(($post_user_id == $uid && $post->posts_state === 0) || $is_mini_admin) {
- $result['other'][] = [
- 'text' => '编辑',
- 'icon' => 'mini-icon mini-xie',
- 'unicode' => 'e6fd',
- 'action' => 'slider',
- 'target_type' => 6,
- 'target_id' => '/pages/creat/index/creat?edit=' . $post_id
- ];
- }
- }
- }else if($key == 'video-url'){
- if($post->post_type == 'video'){
- $result['other'][] = [
- 'text' => '视频下载',
- 'icon' => 'mini-icon mini-xiazai2',
- 'action' => 'video-url',
- 'unicode' => 'e63c',
- 'video_url' => $post->video['video_url']
- ];
- }
- }else if($key == 'copyUrl'){
- $result['other'][] = [
- 'text' => '复制链接',
- 'icon' => 'mini-icon mini-fuzhilianjie',
- 'unicode' => 'e691',
- 'action' => 'copyUrl'
- ];
- }else if($key == 'feedback-notlike-1'){
- $result['other'][] = [
- 'text' => '不喜欢',
- 'icon' => 'mini-icon mini-buxihuan',
- 'unicode' => 'e69d',
- 'action' => 'feedback-notlike-1',
- 'posts_id' => $post_id
- ];
- }else if($key == 'report'){
- if($post_user_id != $uid){
- $result['other'][] = [
- 'text' => '举报',
- 'icon' => 'mini-icon mini-jubao',
- 'unicode' => 'e694',
- 'action' => 'report'
- ];
- }
- }else if($key == 'promotion'){
- $result['other'][] = [
- 'text' => '笔记推广',
- 'icon' => 'mini-icon mini-fufeituiguang1',
- 'unicode' => 'e6f3',
- 'action' => 'promotion'
- ];
- }
- }
- if($post_user_id == $uid || $is_mini_admin){
- $result['other'][] = [
- 'text' => '删除',
- 'icon' => 'mini-icon mini-shanchu211',
- 'unicode' => 'e6f3',
- 'action' => 'delete',
- 'posts_id' => $post->id
- ];
- }
- // _logger_(__file__, __line__, $result);
- return $this->success($result);
- }
- /**
- * 获取文章分享二维码
- * @param Request $request
- * @return \Illuminate\Http\JsonResponse
- * @throws \Exception
- */
- public function makeShowQcode(Request $request)
- {
- $postsId = _abs($request->posts_id);
- $uid = $request->uid;
- global $__MINI_GLOBAL_DEVICE__;
- if(_empty_($postsId)){
- return $this->fail(200001);
- }
- $data = [];
- $data['title'] = Settings::get('about_title', '');
- $post = WxPost::find($postsId);
- if(_empty_($post)){
- return $this->fail(200003);
- }
- $post_user_id = $post->user_id;
- $refer_id = $post->refer_id;
- $posts_content = _mini_phone(_mini_emoji(_mini_aite_replace($post->posts_content), true), true);
- if($posts_content){
- $s_content = preg_replace("/<(img|video).*?src[^\'\"]+[\'\"]([^\"\']+)[^>]+>/is", '', $posts_content);
- $s_content =trim_all_space(strip_tags(html_entity_decode($s_content)), true);
- }
- $post_title = PostUtils::get_the_title($s_content, $post->id, 50);
- PostUtils::mediaProcess($post, $uid, 90004, 0, true);
- // ['glass'=>'', 'theme'=>'black/white', 'attach_id'=>id]
- $poster_glass = get_post_meta($post->id, 'post_poster_glass_obj', 'j');
- if(_empty_($poster_glass)){
- $attach_id = FileUtils::get_url_attach_id($post->img);
- if($attach_id){
- $post_poster_glass_obj = [
- 'glass' => '',
- 'theme' => '',
- 'attach_id' => $attach_id
- ];
- $first_glasses = $post->img . '?imageMogr2/thumbnail/630x800/crop/630x800/gravity/center/format/png/interlace/0/blur/50x1';
- $path = ImageUtils::upload_url_img($first_glasses);
- if($path && $path['url']){
- // 二次上传
- $path2 = ImageUtils::upload_url_img($path['url']. '?imageMogr2/thumbnail/630x800/crop/630x800/gravity/center/format/png/interlace/0/blur/50x1');
- if($path2 && $path2['url']){
- // 三次上传
- $path3 = ImageUtils::upload_url_img($path2['url']. '?imageMogr2/thumbnail/630x800/crop/630x800/gravity/center/format/png/interlace/0/blur/50x1');
- if($path3 && $path3['url']){
- // 四次上传
- $path4 = ImageUtils::upload_url_img($path3['url']. '?imageMogr2/thumbnail/630x800/crop/630x800/gravity/center/format/png/interlace/0/blur/50x1');
- if($path4 && $path4['url']){
- $post_poster_glass_obj['glass'] = $path4['url'];
- update_post_meta($post->id, 'post_poster_glass_obj', $post_poster_glass_obj, 'j');
- FileUtils::force_del_url_file($path3['url']);
- $data['glass'] = $path4['url'] . '?imageMogr2/thumbnail/630x800/crop/630x800/gravity/center/format/png/interlace/0/blur/50x1';
- }else{
- $post_poster_glass_obj['glass'] = $path3['url'];
- update_post_meta($post->id, 'post_poster_glass_obj', $post_poster_glass_obj, 'j');
- $data['glass'] = $path3['url'] . '?imageMogr2/thumbnail/630x800/crop/630x800/gravity/center/format/png/interlace/0/blur/50x1';
- }
- }else{
- $post_poster_glass_obj['glass'] = $path2['url'];
- update_post_meta($post->id, 'post_poster_glass_obj', $post_poster_glass_obj, 'j');
- $data['glass'] = $path2['url'] . '?imageMogr2/thumbnail/630x800/crop/630x800/gravity/center/format/png/interlace/0/blur/50x1';
- }
- }else{
- $post_poster_glass_obj['glass'] = $path['url'];
- update_post_meta($post->id, 'post_poster_glass_obj', $post_poster_glass_obj, 'j');
- $data['glass'] = $path['url'] . '?imageMogr2/thumbnail/630x800/crop/630x800/gravity/center/format/png/interlace/0/blur/50x1';
- }
- }else{
- $data['glass'] = $post->img . '?imageMogr2/thumbnail/630x800/crop/630x800/gravity/center/format/png/interlace/0/blur/50x1';
- }
- UpdatePosterGlassJob::dispatch($post->id);
- }
- }else{
- if(FileUtils::get_url_attach_id($post->img) == $poster_glass['attach_id']){
- _logger_(__file__, __line__, $poster_glass['theme']);
- if(_empty_($poster_glass['theme'])){
- UpdatePosterGlassJob::dispatch($post->id);
- }
- $data['glass'] = $poster_glass['glass'] . '?imageMogr2/thumbnail/630x800/crop/630x800/gravity/center/format/png/interlace/0/blur/50x1';
- }else{
- update_post_meta($post->id, 'post_poster_glass_obj', null, 'j');
- FileUtils::force_del_url_file($poster_glass['glass']);
- }
- }
- $user = WxUser::where('id', $post_user_id)->first(FieldUtils::userInfoColums());
- if($user){
- }else{
- $user = ['user_name'=>'未知用户'];
- }
- if($post->is_anonymous == 1){
- $anonymous_info = UserUtils::get_anonymous_info($user);
- if($anonymous_info){
- $user['user_name'] = $anonymous_info['anonymous_name'];
- $user['user_avatar'] = $anonymous_info['anonymous_avatar'];
- }else{
- $user['user_name'] = '匿名';
- }
- }
- $data['user'] = $user;
- if(empty($post->img)){
- return $this->fail(200006, [], '请先配置“笔记海报默认图片”');
- }
- $page = 'pages/sticky/sticky';
- $code_url = Utils::getMiniCode($page, 'id='.$postsId, $uid);
- $data['qrcode'] = $code_url;
- $data['img'] = $post->img.'?imageMogr2/quality/100/interlace/0/crop/630x800/gravity/center/thumbnail/x800';
- $data['content'] = $post_title;
- $data['tip'] = Settings::get('app_post_poster_bottom_tip', '❤ 扫一扫,找到你想要的生活');
- if($poster_glass){
- $data['tip_color'] = _array_key($poster_glass, 'theme', 'black') == 'white' ? '#333' : '#FFF';
- }else{
- $data['tip_color'] = '#FFF';
- }
- if(Settings::get('is_multi_site', 0) > 0){
- $circle_tip = WxTenant::where('tenant_id', $post->tenant_id)->value('name');
- }else{
- if($post->circle_id > 0){
- $circle_tip = WxCircle::where('id', $post->circle_id)->value('circle_name');
- }else{
- $circle_tip = '广场';
- }
- }
- $data['poster2'] = [
- 'content' => $post_title,
- 'contentImg' => ($post->img == Settings::get('img_post_poster_default', '')) ? '' : ($post->img. '?imageMogr2/quality/100/interlace/0/crop/630x800/gravity/center/thumbnail/x800'),
- 'avatar' => $user->user_avatar,
- 'locationText' => $circle_tip,
- 'locationImg' => env('APP_URL') . '/statics/images/playbill/post/ring.png',
- 'userName' => $user->user_name,
- 'code' => $code_url,
- 'textImg' => env('APP_URL') . '/statics/images/playbill/post/poster-text.png'
- ];
- if(Settings::get('app_h5_home', '')){
- $data['url'] = Settings::get('app_h5_home', '').'/#/pages/sticky/sticky?id='.$post->id;
- }else{
- $data['url'] = env('APP_URL');
- }
- $social = [];
- $share_types = Settings::get('app_post_poster_share_types', []);
- foreach (['wechat', 'timeline', 'qq', 'qzone', 'weibo', 'save'] as $key){
- if(!in_array($key, $share_types)){
- continue;
- }
- if($key == 'wechat'){
- $social[] = [
- 'action' => 'wechat',
- 'color' => '#57be6a',
- 'text' => '微信好友',
- 'icon' => 'mini-icon mini-weixin',
- 'share' => json_encode([
- 'provider' => 'weixin',
- 'type' => 2,
- 'title' => $data['content'],
- 'scene' => 'WXSceneSession',
- 'href' => $data['url'],
- 'imageUrl' => $data['img'],
- 'miniProgram' => [
- 'id' => Settings::get('app_meta_appid', ''),
- 'path' => '/pages/sticky/sticky?id=' . $post->id,
- 'type' => 0,
- 'webUrl' => $data['url']
- ]
- ]),
- ];
- }else if($key == 'timeline'){
- if($__MINI_GLOBAL_DEVICE__ != 'mp'){
- $social[] = [
- 'action' => 'timeline',
- 'color' => '#80cc46',
- 'text' => '朋友圈',
- 'icon' => 'mini-icon mini-pengyouquan1',
- 'share' => json_encode([
- 'provider' => 'weixin',
- 'type' => 2,
- 'title' => $data['content'],
- 'scene' => 'WXSceneTimeline',
- 'href' => $data['url'],
- 'imageUrl' => $data['img']
- ])
- ];
- }
- }else if($key == 'qq'){
- if($__MINI_GLOBAL_DEVICE__ != 'mp') {
- $social[] = [
- 'action' => 'qq',
- 'color' => '#54b4ef',
- 'text' => 'QQ好友',
- 'icon' => 'mini-icon mini-qq1',
- 'share' => json_encode([
- 'provider' => 'qq',
- 'type' => 2,
- 'title' => $data['content'],
- 'summary' => $data['content'],
- 'href' => $data['url'],
- 'imageUrl' => $data['img']
- ])
- ];
- }
- }else if($key == 'qzone'){
- if($__MINI_GLOBAL_DEVICE__ != 'mp') {
- $social[] = [
- 'action' => 'qzone',
- 'color' => '#f7cf46',
- 'text' => 'QQ空间',
- 'icon' => 'mini-icon mini-Rrl_s_112',
- 'share' => json_encode([
- 'provider' => 'qq',
- 'type' => 1,
- 'title' => $data['content'],
- 'href' => $data['url'],
- 'imageUrl' => $data['img']
- ])
- ];
- }
- }else if($key == 'weibo'){
- if($__MINI_GLOBAL_DEVICE__ != 'mp') {
- $social[] = [
- 'action' => 'weibo',
- 'color' => '#d4382a',
- 'text' => '微博',
- 'icon' => 'mini-icon mini-weibo',
- 'share' => json_encode([
- 'provider' => 'sinaweibo',
- 'type' => 0,
- 'title' => $data['content'],
- 'href' => $data['url'],
- 'imageUrl' => $data['img']
- ])
- ];
- }
- }else if($key == 'save'){
- $social[] = [
- 'action' => 'save',
- 'color' => '#999999',
- 'text' => '保存到相册',
- 'icon' => 'mini-icon mini-xiazai2',
- ];
- }
- }
- $data['social'] = $social;
- if($code_url){
- return $this->success($data);
- }else{
- return $this->fail(300001, $data);
- }
- }
- /**
- * 审核笔记
- * @param Request $request
- */
- public function getExceptionalList(Request $request)
- {
- $postsId = $request->posts_id;
- if(_empty_($postsId)){
- return $this->fail(200001);
- }
- $postsId = _abs($postsId);
- $data = WxExceptional::where('posts_id', $postsId)
- ->orderBy('id', 'desc')
- ->get();
- $data->map(function ($v) {
- $v->exceptional_date = format_datetime($v->created_at);
- $v->user = WxUser::where('id', $v->user_id)->first(FieldUtils::userInfoColums());
- });
- return $this->success($data);
- }
- /** 视频推荐接口
- * @param Request $request
- */
- public function recommendedVideos(Request $request){
- $page = $request->page ?: 0;
- $offset = $page * 10;
- $post_id= $request->id;
- if(_empty_($post_id)){
- return $this->fail(200001);
- }
- $uid = $request->uid;
- $data_res = [];
- $post_videos = WxPost::Join('wx_posts_video', 'wx_posts.id', '=', 'wx_posts_video.posts_id')->where('wx_posts.posts_state', 0)->orwhere('wx_posts.id', $post_id)->inRandomOrder()
- ->skip($offset)->take(10)->get(['wx_posts_video.posts_id', 'wx_posts_video.id', 'wx_posts.posts_content', 'wx_posts.user_id', 'wx_posts_video.video_url', 'wx_posts_video.video_thumb_url', 'wx_posts.created_at']);
- $post_videos->map(function ($v) use ($uid, &$data_res, $post_id){
- global $__MINI_GLOBAL_CURRENT_USER_ID__;
- $v->user = WxUser::where('id', $v->user_id)
- ->first(FieldUtils::userInfoColums());//发帖人
- $v->like_count = PostsRepositores::likeCont($v->id); // 笔记喜欢数量
- $v->is_my_posts = $__MINI_GLOBAL_CURRENT_USER_ID__ == $v->user_id; // 是否是我的笔记
- $v->is_follow_user = WxPost::isFollowUser($uid, $v->user_id);// 是否关注该用户
- $v->is_like = WxPost::isLike($uid, $v->id); // 是否喜欢
- $v->is_collect = WxPost::isCollec($uid, $v->id); // 是否收藏
- $v->comment = (new WxPost())
- ->getComment($v->id, ['user_name', 'comment_content', 'user_id', 'posts_user_id', 'comment_img_url']); // 评论
- $v->comment_count = WxCommentRepositores::commentCount($v->id);//评论数量
- $item = [
- 'src' => $v->video_url,
- 'content' => $v->posts_content,
- 'flag' => true,
- 'check' => $v->is_like,
- 'like' => $v->like_count,
- 'isFollow' => $v->is_follow_user,
- 'comment' => $v->comment_count,
- 'avater'=> $v->user->user_avatar,
- 'initialTime' => 0,
- 'at' => $v->user->user_name,
- 'duration' => 999,
- 'uid' => $v->user->id,
- 'pid' => $v->posts_id,
- 'vid' => $v->id,
- 'isAuthor' => $v->is_my_posts,
- 'date' => $v->created_at->format('Y-m-d H:i:s')
- ];
- if($v->posts_id == $post_id){
- array_unshift($data_res, $item);
- }else{
- $data_res[] = $item;
- }
- });
- if($data_res){
- return $this->success($data_res);
- }else{
- return $this->fail(200003);
- }
- }
- }
|