рдореЙрдбреНрдпреВрд▓ modLivestreet 0.3.0-рдЖрд░рд╕реА рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреА рд░рд┐рд▓реАрдЬ

MODX рдФрд░ Livestreet рдмрдВрдбрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рд╡рд┐рд╖рдп рдХреЛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП, рдореИрдВ modLivestreet рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ: livestreet-0.3.0-rc.transport.zip

рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ рд╣рд╛рдВ, рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ :-) рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
1. LiveStreet рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рддрд░реНрдХ рдХреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд╕реБрдзрд╛рд░)ред
2. MODX рдФрд░ LiveStreet рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХрд░рдгред рдЕрдм MODX рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реБрдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ LiveStreet рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП LiveStreet рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдкрдВрдЬреАрдХрд░рдг MODX рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рджреЛрдиреЛрдВ рдЗрдВрдЬрдиреЛрдВ рдореЗрдВ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХрдЯ-рдСрдл рдХреЗ рддрд╣рдд, рдорд╛рдирдХ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ MODX рдХрд╛рд░реНрдп рдпреЛрдЬрдирд╛рдПрдВ (рд╕рд░рд▓реАрдХреГрдд) рдФрд░ modLivestreet рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХрд┐ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рд╕рд╛рде MODX рдФрд░ Livestreet рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдореИрдВ рдмрд╛рдж рдореЗрдВ MODX рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХреИрд╕реЗ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ) рдХреА рдпреЛрдЬрдирд╛ рдкреЛрд╕реНрдЯ рдХрд░реВрдВрдЧрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕реНрд░реЛрдд рдХреЛрдб рднреАред

UPD: github рдкрд░ рдкреИрдХреЗрдЬ рдХрд╛ рдирд┐рд░реНрдорд╛рдг: github.com/Fi1osof/modx-livestreet

рдорд╛рдирдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рдФрд░ modLivestreet рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ MODX рд╡рд░реНрдХрдлрд╝реНрд▓реЛ



рддреЛ рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

1. рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд▓рдЧрдЗрди рдХреЛ рджреЛ рдШрдЯрдирд╛рдУрдВ - onHandleRequest рдФрд░ onPageNotFound рджреНрд╡рд╛рд░рд╛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ Livestreet рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ (рдФрд░ Livestreet рдЪрд░ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг) рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕реНрдерд┐рд░ Livestreet рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдЗрд╕рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдореЙрдбреНрдпреВрд▓ (рдЬреИрд╕реЗ рдХреИрдкреНрдЪрд╛) рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рд╣реИред
рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдФрд░ рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдпрджрд┐, рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп, MODX рдиреЗ рд▓реИрдВрдбрд┐рдВрдЧ рдкреГрд╖реНрда рдкрд╛рдпрд╛, рддреЛ onPageNotFound рдШрдЯрдирд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреА, рдФрд░ рд▓рд╛рдЗрд╡рд╡реЗрдЯ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ livestreet.run рд╕реНрдирд┐рдкреЗрдЯ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ MODX рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ LiveStreet рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рдореЗрдВ MODX рдХреЛ рдХреЗрд╡рд▓ LiveStreet рдкрд░ рдЯрд╛рдИ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдо MODX рдкрд░ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╕рд╛рдЗрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ / рдордВрдЪ / рдЕрдиреБрднрд╛рдЧ (рдпрд╛ рдПрдХ рдЕрд▓рдЧ forum.site.ru рдЙрдкрдбреЛрдореЗрди) рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкреГрд╖реНрда рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдПрдХ рд╕реНрдирд┐рдкреЗрдЯ рдХреЙрд▓ [[! Livestreet.ru]] рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ (рдЬрдбрд╝ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рд╕рд╛рдЗрдЯ), рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ livestreet.url_perfix '/ forum /' рдФрд░ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред /Forum/.* рдорд╛рд╕реНрдХ рдХреЗ рд╕рднреА рдЕрдиреБрд░реЛрдз LiveStreet рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рд╣рдореЗрдВ рд╣рдорд╛рд░рд╛ рдмреНрд▓реЙрдЧ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ред рдпрд╣рд╛рдВ рдЖрдк рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рддреНрдпрд╛рдкрди рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмреНрд▓реЙрдЧ рдереНрд░реЗрдб рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджрд┐ред
рдпрджрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ onPageNotFound рдШрдЯрдирд╛ рдХреЛ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ URL Livestreet рдЕрдиреБрднрд╛рдЧ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ Livestreet рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реИред рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЪреЗрддрд╛рд╡рдиреА рд╣реИ: рдпрджрд┐ рдпрд╣ рдПрдХ Livestreet рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рд╣реИ, рддреЛ рдкрдВрдЬреАрдХрд░рдг рд╕реНрдирд┐рдкреЗрдЯ рдХреЛ snippet.livestreet.ajax-registration.php рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдкреНрд▓рдЧрдЗрди рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рд╣реИ
<?php switch($modx->context->key){ case 'web': break; default: return; } switch($modx->event->name){ //          LiveStreet case 'OnHandleRequest': //   - livestreet_path/config/ define('IN_MODX', true); define('LIVESTREET_WEB', $modx->getOption('site_url')); define('LIVESTREET_PATH', $modx->getOption('livestreet.livestreet_path')); define('LIVESTREET_INDEX_FILE', $modx->getOption('livestreet.index_file')); define('LIVESTREET_URL_PREFIXE', $modx->getOption('livestreet.url_prefix')); $request = false; //print "<br />REQUEST_URI:" . $_SERVER['REQUEST_URI']; //      LiveStreet if($_SERVER['REQUEST_URI'] == LIVESTREET_URL_PREFIXE || $_SERVER['REQUEST_URI']."/" == LIVESTREET_URL_PREFIXE){ $request = '/'; } else{ //     LiveStreet,  $preg = str_replace('/', '\/', LIVESTREET_URL_PREFIXE); if(!preg_match("/^{$preg}/", $_SERVER['REQUEST_URI']."/")){ return; } $request = preg_replace("/^{$preg}/", '', $_SERVER['REQUEST_URI']); } if( substr( $request, 0, 1) != '/') $request = '/'. $request; //    LS define('LIVESTREET_REQUEST_URI', $request); //   ,    ,    if(!$modx->checkSiteStatus()){ return; } $file = LIVESTREET_INDEX_FILE; /*$t = $modx->invokeEvent('onLivestreetUserSave', array('sdfsdf')); print_r($this->processEventResponse($t)); exit;*/ //      LiveStreet $preg = str_replace('/', '\/', "(/templates/|/uploads/|/engine/lib/external/jquery)"); if(preg_match("/^{$preg}/", LIVESTREET_REQUEST_URI)){ $file = LIVESTREET_REQUEST_URI; $file = preg_replace('/\?+.*/', '', $file); $fullpath = str_replace('//','/', LIVESTREET_PATH.$file); if(!file_exists($fullpath)){ die('File Not Found'); } $fsize = filesize($fullpath); $pi = pathinfo( $file); $ext = $pi['extension']; switch ($ext) { case "css": $ctype="text/css; charset=utf-8"; break; case "js": $ctype="application/x-javascript; charset=utf-8"; break; case "pdf": $ctype="application/pdf"; break; case "exe": $ctype="application/octet-stream"; break; case "zip": $ctype="application/zip"; break; case "doc": $ctype="application/msword"; break; case "xls": $ctype="application/vnd.ms-excel"; break; case "ppt": $ctype="application/vnd.ms-powerpoint"; break; case "gif": $ctype="image/gif"; break; case "png": $ctype="image/png"; break; case "jpeg": case "jpg": $ctype="image/jpg"; break; default: $ctype="application/force-download"; } header("Content-type: {$ctype}", true); header("Content-Length: ".$fsize); header("last-modified: ". gmdate("d, dmyh:i:s", filemtime($fullpath) )." GMT"); header("Pragma: public"); header("Expires: 0"); readfile($fullpath); exit; } /* *    -   */ //  $preg = str_replace('/', '\/', "/engine/lib/external/kcaptcha/"); if(preg_match("/^{$preg}/", LIVESTREET_REQUEST_URI)){ $file = 'engine/lib/external/kcaptcha/index.php'; require_once LIVESTREET_PATH.$file; exit; } break; case 'OnPageNotFound': // if not LiveStreet request, stop if(!defined('LIVESTREET_REQUEST_URI')){ return; } $_SERVER['REQUEST_URI'] = LIVESTREET_REQUEST_URI; // Registration if(LIVESTREET_REQUEST_URI == $modx->getOption('livestreet.registration_url', null, '/registration/ajax-registration/')){ // if not in sync mode if($modx->getOption('livestreet.sync_users') == true){ print $modx->runSnippet('livestreet.ajax-registration'); exit; } } print $modx->runSnippet('livestreet.run'); exit; break; default: $modx->event->output( 'true'); ; } 

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдмрд┐рд▓реНрдХреБрд▓ рднреА рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИред рддреЛ рдХреЛрдИ рднреА рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╡рд╣ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

2. Snippet snippet.livestreet.run рдХрд╛ рдЙрдкрдпреЛрдЧ LiveStreet рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ
 <?php if($request_uri){ $_SERVER['REQUEST_URI'] = $request_uri; } ob_start(); @include $modx->getOption('livestreet.livestreet_path').$modx->getOption('livestreet.index_file'); $output = ob_get_contents(); ob_end_clean(); return $output; 

рд╡рд╣ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИред Stupidly LiveStreet рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рдмрдлрд░ рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░реЗрдВред рдЗрд╕ рддрд░рд╣, рдЖрдк рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдкрд╣рд▓реЗ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ MODX рдФрд░ LiveSteet рдореЗрдВ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХреЛ MODX рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕рд▓рд┐рдП рд▓рд┐рд╡рд╕реНрдЯреНрд░реАрдЯ рдореЗрдВ)ред

рдлрд┐рд░ рд╕реЗ рдЖрд░рдХреНрд╖рдг рд╣реИред Livestreet рдореЗрдВ, рд╕рд╛рдордЧреНрд░реА рдЖрдЙрдЯрдкреБрдЯ рдХреНрд▓рд╛рд╕ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдЬрд╛рдХреНрд╕ рдЖрдЙрдЯрдкреБрдЯ рдореЛрдб рдореЗрдВ, рдПрд▓рдПрд╕ рдмреЗрд╡рдХреВрдлреА рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ (); рдЬреЛ рдкреВрд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд░рд╛рд╕ рдореЗрдВ, рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдлрд╝рд╛рдЗрд▓ рдШрдЯрдХреЛрдВ рдореЗрдВ / livestreet / рдбреЙрдХреНрд╕ / forLiveStreet / рд╕реНрд░реЛрдд / рдЗрдВрдЬрди / рдореЙрдбреНрдпреВрд▓ / рджрд░реНрд╢рдХ / Viewer.club.pp
DisplayAjax рдореЗрдердб ($ sType = 'json') рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдЬрдЧрд╣ (); рд╡рд╛рдкрд╕реА рдкрд░;
рдФрд░ рдбрд┐рд╕реНрдкреНрд▓реЗ рдореЗрдердб ($ sTemplate) рдХреЛ рдмрджрд▓реЗрдВ
 if ($this->sResponseAjax) { $this->DisplayAjax($this->sResponseAjax); } 
рдкрд░
 if ($this->sResponseAjax) { $this->DisplayAjax($this->sResponseAjax); return; } 

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ Livesreet рдХреЗ рд╕реНрд╡рддрдВрддреНрд░ рдХрд╛рдо рдХреЛ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрдВ рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╣рдорд╛рд░реЗ рддрд░реНрдХ рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдЧрд╛ред

3. рд╕реНрдирд┐рдкреЗрдЯ livestreet.ajax- рдкрдВрдЬреАрдХрд░рдгред
рдпрд╣ рд╕реНрдирд┐рдкреЗрдЯ Livestreet рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ
 <?php // if not in sync mode if($modx->getOption('livestreet.sync_users') != true){ return; } $path = $modx->getObject('modNamespace', array( 'name' => 'livestreet' )) -> getCorePath()."processors/"; // print $path; // exit; $response = $modx->runProcessor('security/user/ajaxCreate', array( 'username' => $_POST['login'], 'email' => $_POST['mail'], 'passwordnotifymethod' => 'false', 'passwordgenmethod' => 'false', 'specifiedpassword' => $_POST['password'], 'confirmpassword' => $_POST['password_confirm'], ), array( 'processors_path' => $path )); $bStateError = false; $sMsgTitle = null; $sMsg = null; $errors = array(); if($response->isError()){ // print '<pre>'; //print_r($modx->error->errors); $errorsArray = (array)$modx->error->errors; // processEventResponse // $error = $response->getMessage(); if($errMessageArr = (array)explode("\n", $response->getMessage())){ foreach($errMessageArr as $message){ if(!$message = trim($message))continue; if(!$errArr = explode('::', $message) OR count($errArr) != 2){ $sMsg = $message; } else{ $errorsArray[] = array( 'id' => $errArr[0], 'msg' => $errArr[1], ); } } } foreach($errorsArray as $err){ // LiveStreet Errors if($name = $err['id']){ switch($name){ case 'username': $name = 'login'; break; case 'specifiedpassword': $name = 'password'; break; case 'confirmpassword': $name = 'password_confirm'; break; default: continue; } $errors[$name][0] = $err['msg']; } // MODX errors else{ $sMsg = current($err); } } if(!$errors && !$sMsg){ $sMsg = '  '; } if($sMsg){ $sMsgTitle = 'Error'; $bStateError = true; } $response = array( 'sMsgTitle' => $sMsgTitle, 'sMsg' => $sMsg, 'bStateError' => $bStateError, 'aErrors' => $errors ); } else{ // Success $response = array( 'sMsgTitle' => null, 'sMsg' => '!   !', 'bStateError' => false, 'sUrlRedirect' => $_POST['return-path'], ); } return json_encode($response); 

рдпрджрд┐ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкрдВрдЬреАрдХрд░рдг рдЕрдХреНрд╖рдо рд╣реИ, рддреЛ рд╕реНрдирд┐рдкреЗрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рд▓рд╛рдЗрд╡рд╕реНрдЯреНрд░реАрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдзрд╛ рдЕрдиреБрд░реЛрдз рд╣реИ, рддреЛ рдЕрдиреБрд░реЛрдз рд▓рд┐рд╡реЗрд╕реНрдЯреНрд░реАрдЯ рдФрд░ рдЙрд╕ рд╕рднреА рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкрдВрдЬреАрдХрд░рдг рд╕рдХреНрд╖рдо рд╣реИ, рддреЛ рдЕрдиреБрд░реЛрдз Livestreet рдХреЛ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ MODX (рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ / рдШрдЯрдХреЛрдВ / livestreet / рдкреНрд░реЛрд╕реЗрд╕рд░ / рд╕реБрд░рдХреНрд╖рд╛ / рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ / ajaxCreate.class.php рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╡рд░реНрдЧ modUserCreateProcessor рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЗрд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рд░ рд╕рд░рд▓ рд╣реИ - рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрд╕реЗрд╕рд░ modx / рдкреНрд░реЛрд╕реЗрд╕рд░ / рд╕реБрд░рдХреНрд╖рд╛ / рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ / create.class.php рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ MODX рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛
рдЗрд╕ рдХреЙрд▓ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╕реАрдзреЗ рдЗрд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрдирдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ, рд╣рдо рдмрд╕ рдЗрд╕ рдЕрдзрд┐рдХрд╛рд░ рдХреЗ рд╕рддреНрдпрд╛рдкрди рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ (рдЗрд╕ рддрдХрдиреАрдХ рдкрд░ рдЯрд┐рдк рдХреЗ рд▓рд┐рдП bezumkin рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдзрдиреНрдпрд╡рд╛рдж)ред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ
 <?php $file = MODX_PROCESSORS_PATH.'security/user/create.class.php'; if(!file_exists($file)){ class modLivestreetUserCreateErrorProcessor extends modProcessor { public function process() { $err = 'processor security/user/create not found'; $this->modx->log(modX::LOG_LEVEL_ERROR, $err); return $this->failure($err); } } return 'modLivestreetUserCreateErrorProcessor'; } require_once $file; class modLivestreetUserCreateProcessor extends modUserCreateProcessor { public $permission = ''; } return 'modLivestreetUserCreateProcessor'; 


рдЦреИрд░, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ MODX рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо OnBeforeUserFormSave рдЗрд╡реЗрдВрдЯ рдкрд░ рдЕрдкрдиреЗ livestreet_users рдкреНрд▓рдЧрдЗрди рдХреЛ рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ
 <?php /* * Synchronized registration MODX and Livestreet users */ switch($modx->event->name){ case 'OnBeforeUserFormSave': switch($scriptProperties['mode']){ // Register new user case 'new': // if not in sync mode if($modx->getOption('livestreet.sync_users') != true){ return; } // Using for LiveStreet ModuleSecurity::GenerateSessionKey // check password method if($scriptProperties['data']['passwordgenmethod'] == 'g'){ $len = $modx->getOption('password_generated_length',null,8); $password = $password_confirm = modUserValidation::generatePassword($len); /* * note then newPassword in createProcessor will not be overwrited !!! * in backend will see wron new passrowd */ $scriptProperties['user']->set('password', $password); } else{ $password = $scriptProperties['data']['specifiedpassword']; $password_confirm = $scriptProperties['data']['confirmpassword']; } $_REQUEST['password'] = $password; $_REQUEST['password_confirm'] = $password_confirm; $_REQUEST['login'] = $scriptProperties['data']['username']; $_REQUEST['mail'] = $scriptProperties['data']['email']; $_REQUEST['login'] = $scriptProperties['data']['username']; if($modx->context->key == 'mgr'){ $captcha = time(); $_SESSION['captcha_keystring'] = $captcha; $_REQUEST['captcha'] = $captcha; $_SESSION['user_id'] = ''; $_REQUEST['security_ls_key'] = md5( session_id(). $modx->getOption('livestreet.module.security.hash', null, 'livestreet_security_key')); } $response = $modx->runSnippet('livestreet.run', array( 'request_uri' => $modx->getOption('livestreet.registration_url') )); $response = json_decode($response); if(!is_object($response)){ $modx->event->output('  '); } elseif($response->aErrors){ $errors = ''; $errors__ = array(); foreach((array)$response->aErrors as $f => $val){ $errors .= "$f:: ". $val[0]."\n"; } $modx->event->_output = $errors; } return; break; default:; } break; default:$modx->log(modX::LOG_LEVEL_ERROR, "Wrong Event: ". $modx->event->name); } 

MODX рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдХреНрд╖рдг рдореЗрдВ, рд╕рднреА рдЬрд╛рдВрдЪреЛрдВ рдХреЗ рдмрд╛рдж (рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ), рдкреНрд▓рдЧ-рдЗрди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ LiveStreet рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдкреНрд░рдпрд╛рд╕ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо LiveStreet рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ MODX рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рдЕрдВрдд рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ MODX рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ MODX рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдФрд░ рдлреНрд░рдВрдЯрдПрдВрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╡рд╣рд╛рдВ, рд╣рдо рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ рдФрд░ MODX рдФрд░ LiveStreet рджреЛрдиреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╣рдо рдЗрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдИрдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдВрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рдПрд▓рдПрд╕ рдореЗрдВ рдИрдореЗрд▓ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдХреБрдВрдЬреА рд╣реИ)ред

рдпрд╣ рд╕рдм :-)
рдЗрд╕рд▓рд┐рдП рдореИрдВ MODX рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ :-) рд╣рдордиреЗ рдЗрдВрдЬрди рдХреЗ рдХреЛрдб рдХреЗ рдмрд╛рдЗрдЯ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛, рдЗрдВрдЬрди рдХреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ред
рд▓реЗрдХрд┐рди MODX рдХреЗ рддрд╣рдд рдХреЛрдИ рд╕рд╛рдорд╛рдЬрд┐рдХ рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди Livestreet рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ MODX рдЬреИрд╕реА API рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЙрдирдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рднреА рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдПрдХ рд╕рд╛рде, рдпреЗ рдЗрдВрдЬрди рдПрдХ рдорд╣рд╛рди рдЙрддреНрдкрд╛рдж рджреЗ рд╕рдХрддреЗ рд╣реИрдВ! рдореИрдВ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ред

UPD 2: рдирдИ рд░рд┐рд▓реАрдЬрд╝ рд░рд┐рд▓реАрдЬрд╝: modlivestreet-0.4.1-rc.transport.zip
рдирдИ:
1. рд╕рднреА рддрддреНрд╡реЛрдВ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЕрдм modLivestreet рдЙрдкрд╕рд░реНрдЧ рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдирдП рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдпрдХреАрдирди рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рднреА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдпрд╣ рдкреБрд░рд╛рдиреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдПрдХ рдирдП рдореЗрдВ рдбрд╛рд▓рдиреЗ рдФрд░ рдореБрдЦреНрдп рдкреГрд╖реНрда рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ
2. рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ / рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ /, / рдЕрдкрд▓реЛрдб /, рдЖрджрд┐ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рддрд╛рдХрд┐ рдбрд╛рдЙрдирд▓реЛрдб .p, рдЖрджрд┐ рдирд╣реАрдВред
рдмреЗрд╢рдХ, рдРрд╕реА рдлрд╛рдЗрд▓реЗрдВ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдРрд╕реА рдлрд╛рдЗрд▓ / рд╕реНрдХрд┐рди / рдХреЙрдиреНрдлрд┐рдЧрд░ / рдореЗрдВ рд╣реЛрддреА рд╣реИред

UPD 3: рд╕реБрд░рдХреНрд╖рд╛ рдиреЛрдЯ: modxlivestreet.ru/blog/modLivestreet_security/7.html

Source: https://habr.com/ru/post/In155063/


All Articles