mirror of
https://github.com/Mibew/mibew.git
synced 2025-02-25 07:44:33 +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