mirror of
				https://github.com/Mibew/mibew.git
				synced 2025-11-04 12:25:11 +03:00 
			
		
		
		
	
							parent
							
								
									f6fe379a54
								
							
						
					
					
						commit
						6e71f0542b
					
				@ -17,6 +17,7 @@
 | 
				
			|||||||
 * limitations under the License.
 | 
					 * limitations under the License.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use Mibew\Asset\Generator\UrlGeneratorInterface as AssetUrlGeneratorInterface;
 | 
				
			||||||
use Mibew\Settings;
 | 
					use Mibew\Settings;
 | 
				
			||||||
use Mibew\Thread;
 | 
					use Mibew\Thread;
 | 
				
			||||||
use Mibew\Style\ChatStyle;
 | 
					use Mibew\Style\ChatStyle;
 | 
				
			||||||
@ -375,12 +376,15 @@ function setup_chatview(Thread $thread)
 | 
				
			|||||||
 * Prepare some data for chat for user
 | 
					 * Prepare some data for chat for user
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @param UrlGeneratorInterface $url_generator A URL generator object.
 | 
					 * @param UrlGeneratorInterface $url_generator A URL generator object.
 | 
				
			||||||
 | 
					 * @param AssetUrlGeneratorInterface $asset_url_generator An asset URL generator
 | 
				
			||||||
 | 
					 * object.
 | 
				
			||||||
 * @param Request $request The current request.
 | 
					 * @param Request $request The current request.
 | 
				
			||||||
 * @param Thread $thread thread object that will be used
 | 
					 * @param Thread $thread thread object that will be used
 | 
				
			||||||
 * @return array Array of chat view data
 | 
					 * @return array Array of chat view data
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
function setup_chatview_for_user(
 | 
					function setup_chatview_for_user(
 | 
				
			||||||
    UrlGeneratorInterface $url_generator,
 | 
					    UrlGeneratorInterface $url_generator,
 | 
				
			||||||
 | 
					    AssetUrlGeneratorInterface $asset_url_generator,
 | 
				
			||||||
    Request $request,
 | 
					    Request $request,
 | 
				
			||||||
    Thread $thread
 | 
					    Thread $thread
 | 
				
			||||||
) {
 | 
					) {
 | 
				
			||||||
@ -428,7 +432,9 @@ function setup_chatview_for_user(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // Set default operator's avatar
 | 
					    // Set default operator's avatar
 | 
				
			||||||
    $operator = operator_by_id($thread->agentId);
 | 
					    $operator = operator_by_id($thread->agentId);
 | 
				
			||||||
    $data['chat']['avatar'] = ($operator['vcavatar'] ? $operator['vcavatar'] : '');
 | 
					    $data['chat']['avatar'] = $operator['vcavatar']
 | 
				
			||||||
 | 
					        ? $asset_url_generator->generate($operator['vcavatar'])
 | 
				
			||||||
 | 
					        : '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return $data;
 | 
					    return $data;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -40,6 +40,7 @@ class ThreadController extends AbstractController
 | 
				
			|||||||
        $processor->setRouter($this->getRouter());
 | 
					        $processor->setRouter($this->getRouter());
 | 
				
			||||||
        $processor->setAuthenticationManager($this->getAuthenticationManager());
 | 
					        $processor->setAuthenticationManager($this->getAuthenticationManager());
 | 
				
			||||||
        $processor->setMailerFactory($this->getMailerFactory());
 | 
					        $processor->setMailerFactory($this->getMailerFactory());
 | 
				
			||||||
 | 
					        $processor->setAssetManager($this->getAssetManager());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $processor->handleRequest($request);
 | 
					        return $processor->handleRequest($request);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -54,6 +54,7 @@ class UserChatController extends AbstractController
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        $page = setup_chatview_for_user(
 | 
					        $page = setup_chatview_for_user(
 | 
				
			||||||
            $this->getRouter(),
 | 
					            $this->getRouter(),
 | 
				
			||||||
 | 
					            $this->getAssetManager()->getUrlGenerator(),
 | 
				
			||||||
            $request,
 | 
					            $request,
 | 
				
			||||||
            $thread
 | 
					            $thread
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
				
			|||||||
@ -58,7 +58,7 @@ class AvatarController extends AbstractController
 | 
				
			|||||||
            throw new NotFoundException('The operator is not found');
 | 
					            throw new NotFoundException('The operator is not found');
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $page['avatar'] = $op['vcavatar'];
 | 
					        $page['avatar'] = $op['vcavatar'] ? $this->asset($op['vcavatar']) : '';
 | 
				
			||||||
        $page['currentop'] = $op
 | 
					        $page['currentop'] = $op
 | 
				
			||||||
            ? get_operator_name($op) . ' (' . $op['vclogin'] . ')'
 | 
					            ? get_operator_name($op) . ' (' . $op['vclogin'] . ')'
 | 
				
			||||||
            : getlocal('-not found-');
 | 
					            : getlocal('-not found-');
 | 
				
			||||||
@ -123,7 +123,7 @@ class AvatarController extends AbstractController
 | 
				
			|||||||
                // Move uploaded file to avatar directory
 | 
					                // Move uploaded file to avatar directory
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    $file->move($avatar_local_dir, $new_file_name);
 | 
					                    $file->move($avatar_local_dir, $new_file_name);
 | 
				
			||||||
                    $avatar = $this->asset('files/avatar/' . $new_file_name);
 | 
					                    $avatar = 'files/avatar/' . $new_file_name;
 | 
				
			||||||
                } catch (Exception $e) {
 | 
					                } catch (Exception $e) {
 | 
				
			||||||
                    $errors[] = failed_uploading_file($orig_filename, "Error moving file");
 | 
					                    $errors[] = failed_uploading_file($orig_filename, "Error moving file");
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
				
			|||||||
@ -19,6 +19,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace Mibew\Controller;
 | 
					namespace Mibew\Controller;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use Mibew\Asset\Generator\UrlGeneratorInterface as AssetUrlGeneratorInterface;
 | 
				
			||||||
use Mibew\EventDispatcher\EventDispatcher;
 | 
					use Mibew\EventDispatcher\EventDispatcher;
 | 
				
			||||||
use Mibew\EventDispatcher\Events;
 | 
					use Mibew\EventDispatcher\Events;
 | 
				
			||||||
use Mibew\Settings;
 | 
					use Mibew\Settings;
 | 
				
			||||||
@ -125,7 +126,10 @@ class WidgetController extends AbstractController
 | 
				
			|||||||
                $response_data['dependencies']['invitationCreate'] = array();
 | 
					                $response_data['dependencies']['invitationCreate'] = array();
 | 
				
			||||||
                $response_data['data']['invitation'] = array(
 | 
					                $response_data['data']['invitation'] = array(
 | 
				
			||||||
                    'operatorName' => htmlspecialchars($operator_name),
 | 
					                    'operatorName' => htmlspecialchars($operator_name),
 | 
				
			||||||
                    'avatarUrl' => htmlspecialchars($operator['vcavatar']),
 | 
					                    'avatarUrl' => htmlspecialchars($this->asset(
 | 
				
			||||||
 | 
					                        $operator['vcavatar'],
 | 
				
			||||||
 | 
					                        AssetUrlGeneratorInterface::ABSOLUTE_URL
 | 
				
			||||||
 | 
					                    )),
 | 
				
			||||||
                    'threadUrl' => $this->generateUrl(
 | 
					                    'threadUrl' => $this->generateUrl(
 | 
				
			||||||
                        'chat_user_invitation',
 | 
					                        'chat_user_invitation',
 | 
				
			||||||
                        array(),
 | 
					                        array(),
 | 
				
			||||||
 | 
				
			|||||||
@ -258,4 +258,63 @@ class Updater
 | 
				
			|||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Performs all database updates needed for 2.0.0-beta.4.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return boolean True if the updates have been applied successfully and
 | 
				
			||||||
 | 
					     * false otherwise.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected function update20000Beta4()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $db = $this->getDatabase();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!$db) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $db->query('START TRANSACTION');
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            $operators = $db->query(
 | 
				
			||||||
 | 
					                'SELECT operatorid AS id, vcavatar AS avatar FROM {operator}',
 | 
				
			||||||
 | 
					                null,
 | 
				
			||||||
 | 
					                array('return_rows' => Database::RETURN_ALL_ROWS)
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Mibew base path should not be included in operators' avatars
 | 
				
			||||||
 | 
					            // which stored in the database. Remove the prefixes one by one.
 | 
				
			||||||
 | 
					            foreach ($operators as $operator) {
 | 
				
			||||||
 | 
					                if (empty($operator['avatar'])) {
 | 
				
			||||||
 | 
					                    // The operator has no avatar.
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (!preg_match("/^.*(files\/avatar\/[^\/]+)$/", $operator['avatar'], $matches)) {
 | 
				
			||||||
 | 
					                    // Avatar's path has an unknown format.
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Remove Mibew's web root from avatar's path
 | 
				
			||||||
 | 
					                $db->query(
 | 
				
			||||||
 | 
					                    'UPDATE {operator} SET vcavatar = :avatar WHERE operatorid = :id',
 | 
				
			||||||
 | 
					                    array(
 | 
				
			||||||
 | 
					                        ':id' => $operator['id'],
 | 
				
			||||||
 | 
					                        ':avatar' => $matches[1],
 | 
				
			||||||
 | 
					                    )
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } catch (\Exception $e) {
 | 
				
			||||||
 | 
					            // Something went wrong. We actually cannot update the database.
 | 
				
			||||||
 | 
					            $this->errors[] = getlocal('Cannot update content: {0}', $e->getMessage());
 | 
				
			||||||
 | 
					            // The database changes should be discarded.
 | 
				
			||||||
 | 
					            $db->query('ROLLBACK');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // All needed data has been updated.
 | 
				
			||||||
 | 
					        $db->query('COMMIT');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -20,6 +20,8 @@
 | 
				
			|||||||
namespace Mibew\RequestProcessor;
 | 
					namespace Mibew\RequestProcessor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Import namespaces and classes of the core
 | 
					// Import namespaces and classes of the core
 | 
				
			||||||
 | 
					use Mibew\Asset\AssetManagerAwareInterface;
 | 
				
			||||||
 | 
					use Mibew\Asset\AssetManagerInterface;
 | 
				
			||||||
use Mibew\Authentication\AuthenticationManagerAwareInterface;
 | 
					use Mibew\Authentication\AuthenticationManagerAwareInterface;
 | 
				
			||||||
use Mibew\Authentication\AuthenticationManagerInterface;
 | 
					use Mibew\Authentication\AuthenticationManagerInterface;
 | 
				
			||||||
use Mibew\Http\Exception\AccessDeniedException;
 | 
					use Mibew\Http\Exception\AccessDeniedException;
 | 
				
			||||||
@ -53,6 +55,7 @@ use Symfony\Component\HttpFoundation\Request;
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
class ThreadProcessor extends ClientSideProcessor implements
 | 
					class ThreadProcessor extends ClientSideProcessor implements
 | 
				
			||||||
    RouterAwareInterface,
 | 
					    RouterAwareInterface,
 | 
				
			||||||
 | 
					    AssetManagerAwareInterface,
 | 
				
			||||||
    AuthenticationManagerAwareInterface,
 | 
					    AuthenticationManagerAwareInterface,
 | 
				
			||||||
    MailerFactoryAwareInterface
 | 
					    MailerFactoryAwareInterface
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -80,6 +83,13 @@ class ThreadProcessor extends ClientSideProcessor implements
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    protected $mailerFactory = null;
 | 
					    protected $mailerFactory = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * An instance of asset manager.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var AssetManagerInterface|null
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected $assetManager = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Loads thread by id and token and checks if thread loaded
 | 
					     * Loads thread by id and token and checks if thread loaded
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
@ -187,6 +197,22 @@ class ThreadProcessor extends ClientSideProcessor implements
 | 
				
			|||||||
        return $this->mailerFactory;
 | 
					        return $this->mailerFactory;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * {@inheritdoc}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function getAssetManager()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return $this->assetManager;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * {@inheritdoc}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function setAssetManager(AssetManagerInterface $manager)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->assetManager = $manager;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Class constructor
 | 
					     * Class constructor
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
@ -662,6 +688,7 @@ class ThreadProcessor extends ClientSideProcessor implements
 | 
				
			|||||||
        // Prepare chat options
 | 
					        // Prepare chat options
 | 
				
			||||||
        $client_data = setup_chatview_for_user(
 | 
					        $client_data = setup_chatview_for_user(
 | 
				
			||||||
            $this->getRouter(),
 | 
					            $this->getRouter(),
 | 
				
			||||||
 | 
					            $this->getAssetManager()->getUrlGenerator(),
 | 
				
			||||||
            $this->currentRequest,
 | 
					            $this->currentRequest,
 | 
				
			||||||
            $thread
 | 
					            $thread
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
@ -834,7 +861,8 @@ class ThreadProcessor extends ClientSideProcessor implements
 | 
				
			|||||||
        if ($thread->agentId) {
 | 
					        if ($thread->agentId) {
 | 
				
			||||||
            $operator = operator_by_id($thread->agentId);
 | 
					            $operator = operator_by_id($thread->agentId);
 | 
				
			||||||
            if ($operator['vcavatar']) {
 | 
					            if ($operator['vcavatar']) {
 | 
				
			||||||
                $image_link = $operator['vcavatar'];
 | 
					                $url_generator = $this->getAssetManager()->getUrlGenerator();
 | 
				
			||||||
 | 
					                $image_link = $url_generator->generate($operator['vcavatar']);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user