/**
  * Return message object
  *
  * @param void
  * @return ProjectMessage
  */
 function getMessage()
 {
     if (is_null($this->message)) {
         $this->message = ProjectMessages::findById($this->getMessageId());
     }
     return $this->message;
 }
 public function init()
 {
     $this->parts = ZakazParts::model()->findAllByAttributes(['proj_id' => $this->project->id]);
     $this->payments = ProjectPayments::model()->findByAttributes(['order_id' => $this->project->id]);
     $this->changes = ProjectChanges::model()->findAllByAttributes(['project_id' => $this->project->id]);
     $this->messages = ProjectMessages::model()->findAllByAttributes(['order' => $this->project->id], ['order' => 'id DESC']);
 }
Example #3
0
	/**
	 * This function will return application data object that matches action and in object ID
	 *
	 * @param void
	 * @return ApplicationDataObject
	 */
	function getInObject() {
		if(is_null($this->in_object)) {
			if($this->getAction() == self::ADD_COMMENT_ACTION) {
				$this->in_object = ProjectMessages::findById($this->getInObjectId());
			} elseif($this->getAction() == self::ADD_TASK_ACTION) {
				$this->in_object = Projects::findById($this->getInObjectId());
			} // if
		} // if
		return $this->in_object;
	} // getInObject
 public function actionIndex()
 {
     if (Yii::app()->request->isAjaxRequest) {
         header('Content-Type: application/json');
         echo CJSON::encode(array('success' => true, 'msg' => ProjectMessages::model()->findByPk(Events::model()->findByPk(Yii::app()->request->getParam('id'))->event_id)->message));
         Yii::app()->end();
     }
     $events = Events::model()->findAll(array('condition' => '', 'order' => 'timestamp DESC'));
     $this->render('index', array('events' => $events));
 }
 /**
  *  Вывод и добавление сообщений
  */
 public function actionIndex($orderId)
 {
     Yii::app()->session['project_id'] = $orderId;
     if (Yii::app()->request->isAjaxRequest) {
         if (Yii::app()->request->getPost('ProjectMessages')) {
             $model = new ProjectMessages();
             $model->sender = Yii::app()->user->id;
             $model->moderated = 0;
             $model->order = $orderId;
             $model->attributes = Yii::app()->request->getPost('ProjectMessages');
             $model->date = date('Y-m-d H:i:s');
             switch ($model->recipient) {
                 case 'manager':
                     $model->recipient = 1;
                     break;
                 case 'customer':
                     if (User::model()->isCustomer()) {
                         $model->recipient = Zakaz::model()->resetScope()->findByPk($orderId)->attributes['executor'];
                     }
                     if (User::model()->isAuthor()) {
                         $model->recipient = Zakaz::model()->findByPk($orderId)->attributes['user_id'];
                     }
                     break;
             }
             $model->save();
             EventHelper::addMessage($orderId, $model->message);
         }
         $this->renderPartial('chat', array('orderId' => $orderId));
         Yii::app()->end();
     }
     $model = Zakaz::model()->resetScope()->findByPk($orderId);
     if (isset($_POST['Zakaz'])) {
         $model->attributes = $_POST['Zakaz'];
         $model->save();
     }
     $this->render('index', array('orderId' => $orderId, 'executor' => Zakaz::getExecutor($orderId)));
 }
Example #6
0
/**
 * Call back function for message link
 * 
 * @param mixed $matches
 * @return
 */
function replace_message_link_callback($matches)
{
    if (count($matches) < 2) {
        return null;
    }
    // if
    if (!logged_user()->isMemberOfOwnerCompany()) {
        $object = ProjectMessages::findOne(array('conditions' => array('`id` = ? AND `project_id` = ? AND `is_private` = 0 ', $matches[1], active_project()->getId())));
    } else {
        $object = ProjectMessages::findOne(array('conditions' => array('`id` = ? AND `project_id` = ?', $matches[1], active_project()->getId())));
    }
    // if
    if (!$object instanceof ProjectMessage) {
        return '<del>' . lang('invalid reference') . '</del>';
    } else {
        return '<a href="' . $object->getViewUrl() . '">' . $object->getTitle() . '</a>';
    }
    // if
}
 function linked_object_filters()
 {
     $genid = gen_id();
     $listeners = array('on_selection_change' => "Ext.getCmp('dimFilter').fireEvent('memberselected', member_selector['{$genid}'].sel_context);");
     $options = array('select_current_context' => true, 'listeners' => $listeners, 'width' => 195);
     render_member_selectors(ProjectMessages::instance()->getObjectTypeId(), $genid, null, $options, null, null, false);
     die;
 }
Example #8
0
<?php

$panel = TabPanels::instance()->findById('messages-panel');
if ($panel instanceof TabPanel && $panel->getEnabled()) {
    $limit = 5;
    $result = ProjectMessages::instance()->listing(array("order" => "updated_on", "order_dir" => "desc", "start" => 0, "limit" => $limit));
    $active_members = array();
    $context = active_context();
    foreach ($context as $selection) {
        if ($selection instanceof Member) {
            $active_members[] = $selection;
        }
    }
    if (count($active_members) > 0) {
        $mnames = array();
        $allowed_contact_ids = array();
        foreach ($active_members as $member) {
            $mnames[] = clean($member->getName());
        }
        $widget_title = lang('notes') . ' ' . lang('in') . ' ' . implode(", ", $mnames);
    }
    $total = $result->total;
    $messages = $result->objects;
    $genid = gen_id();
    if ($total) {
        include_once 'template.php';
    }
}
 /**
  * Delete specific message
  *
  * @access public
  * @param void
  * @return null
  */
 function delete()
 {
     if (logged_user()->isGuest()) {
         flash_error(lang('no access permissions'));
         ajx_current('empty');
         return;
     }
     ajx_current("empty");
     $message = ProjectMessages::findById(get_id());
     if (!$message instanceof ProjectMessage) {
         flash_error(lang('message dnx'));
         ajx_current("empty");
         return;
     }
     // if
     if (!$message->canDelete(logged_user())) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     // if
     try {
         DB::beginWork();
         $message->trash();
         DB::commit();
         ApplicationLogs::createLog($message, ApplicationLogs::ACTION_TRASH);
         flash_success(lang('success deleted message', $message->getObjectName()));
         if (array_var($_POST, 'popup', false)) {
             ajx_current("reload");
         } else {
             ajx_current("back");
         }
         ajx_add("overview-panel", "reload");
     } catch (Exception $e) {
         DB::rollback();
         flash_error(lang('error delete message'));
         ajx_current("empty");
     }
     // try
 }
    echo lang('new account step start workspace info', '<span class="ico-workspace-add" style="padding: 5px 16px 0 0">&nbsp;</span>', logged_user()->getPersonalProject()->getName());
    ?>
<br/><br/>
<?php 
}
$step++;
?>
  

<b><?php 
echo lang('new account step actions', $step);
?>
</b>
	<?php 
$task_count = ProjectTasks::count('`created_by_id` = ' . logged_user()->getId());
$note_count = ProjectMessages::count('`created_by_id` = ' . logged_user()->getId());
//$contact = ProjectContacts::findOne(array('conditions'=>'created_by_id='.logged_user()->getId()));
if ($task_count > 0 || $note_count > 0) {
    echo '<img src="' . image_url('16x16/complete.png') . '" />';
}
?>
<br/>
<?php 
echo lang('new account step actions info');
?>
<br/>

<span class="ico-message" style="padding: 5px 16px 0 0">&nbsp;</span>
<a class='internalLink dashboard-link' href='<?php 
echo get_url('message', 'add');
?>
Example #11
0
<?php

/**
 * Created by PhpStorm.
 * User: coolfire
 * Date: 26.06.15
 * Time: 13:54
 */
$criteria = new CDbCriteria();
if (!Yii::app()->user->isGuest) {
    $criteria->addCondition('(moderated=1 OR sender IN (SELECT userid FROM AuthAssignment WHERE itemname IN ("Admin","Manager")) OR sender=' . Yii::app()->user->id . ') AND (sender=' . Yii::app()->user->id . ' OR recipient IN (' . Yii::app()->user->id . ',0' . (User::model()->isAuthor() ? ',-1' : '') . '))');
}
$criteria->addCondition('`order` = :oid');
$criteria->params[':oid'] = (int) $orderId;
$messages = ProjectMessages::model()->findAll($criteria);
?>

<div id="chatWindow" class="col-xs-12 chat-view chtpl0-chatblock">
<?php 
Yii::app()->clientScript->registerCss('cs1', '
div.chat-window::after {
    content: "' . ProjectModule::t('Here is your correspondence') . '";
}');
if (User::model()->isAuthor() && !$order->executor && $order->status <= 2) {
    Yii::app()->clientScript->registerCss('cs2', '
div.chat-window::before {
     content: "' . ProjectModule::t('Please, write that you are ready to take this order or ask a question.') . '";
}');
}
?>
    <?php 
 /**
  *  Вывод и добавление сообщений
  */
 public function actionIndex($orderId)
 {
     $isGuest = Yii::app()->user->isGuest;
     Yii::app()->session['project_id'] = $orderId;
     if (Yii::app()->request->isAjaxRequest) {
         if (Yii::app()->request->getPost('ProjectMessages')) {
             $id = (int) $_POST['ProjectMessages']['id'];
             if ($id > 0) {
                 $model = ProjectMessages::model()->findByPk($id);
             } else {
                 $model = new ProjectMessages();
                 $model->sender = Yii::app()->user->id;
                 $model->moderated = 0;
                 $model->order = $orderId;
             }
             $post = $_POST['ProjectMessages']['message'];
             $post = str_replace("\r\n", '<br>', $post);
             $post = str_replace("\n", '<br>', $post);
             $_POST['ProjectMessages']['message'] = $post;
             $model->attributes = Yii::app()->request->getPost('ProjectMessages');
             $model->date = date('Y-m-d H:i:s');
             switch ($model->recipient) {
                 case 'manager':
                     $model->recipient = 1;
                     break;
                 case 'customer':
                     if (User::model()->isCustomer()) {
                         $model->recipient = Zakaz::model()->resetScope()->findByPk($orderId)->attributes['executor'];
                         $type_id = Emails::TYPE_20;
                     } else {
                         if (User::model()->isAuthor()) {
                             $model->recipient = Zakaz::model()->findByPk($orderId)->attributes['user_id'];
                             $type_id = Emails::TYPE_16;
                         }
                     }
                     $user = User::model()->findByPk($model->recipient);
                     $profile = Profile::model()->findAll("`user_id`='{$model->recipient}'");
                     $email = new Emails();
                     $rec = Templates::model()->findAll("`type_id`='{$type_id}'");
                     $title = $rec[0]->title;
                     $body = $rec[0]->text;
                     $email->name = $user->full_name;
                     if (strlen($email->name) < 2) {
                         $email->name = $user->username;
                     }
                     $email->num_order = $orderId;
                     $email->message = $post;
                     $email->page_order = 'http://' . $_SERVER['SERVER_NAME'] . '/project/chat?orderId=' . $orderId;
                     $email->sendTo($user->email, $body, $type_id);
                     break;
             }
             //print_r($model);
             //echo '<br>$model->save()='.$model->save();
             EventHelper::addMessage($orderId, $model->message);
         }
         $this->renderPartial('chat', array('orderId' => $orderId, 'isGuest' => $isGuest));
         Yii::app()->end();
     }
     $order = Zakaz::model()->resetScope()->findByPk($orderId);
     $parts = ZakazParts::model()->findAll(array('condition' => "`proj_id`='{$orderId}'"));
     if ($isGuest) {
         Yii::app()->theme = 'client';
         // если гость прошёл по ссылке на неcуществующий
         // проект, отправляем его на регистрацию
         $url = 'http://' . $_SERVER['SERVER_NAME'] . '/';
         if (!$order) {
             $this->redirect($url);
         }
         $moderate_types = EventHelper::get_moderate_types_string();
         $events = Events::model()->findAll(array('condition' => "`event_id`='{$orderId}' AND `type` in ({$moderate_types})", 'order' => 'timestamp DESC'), array(':event_id' => $orderId));
         $moderated = count($events) == 0;
         // если гость прошёл по ссылке на непромодерированный
         // проект, отправляем его на регистрацию
         if (!$moderated) {
             $this->redirect(Yii::app()->createUrl('user/login'));
         }
         //			Catalog::model()->tableName();
         //$EmptyChat = UserModule::t('EmptyChat');
         $this->render('index', array('orderId' => $orderId, 'order' => $order, 'executor' => Zakaz::getExecutor($orderId), 'moderated' => $moderated, 'isGuest' => $isGuest, 'parts' => $parts));
         Yii::app()->end();
     }
     $moderate_types = EventHelper::get_moderate_types_string();
     $events = Events::model()->findAll(array('condition' => "`event_id`='{$orderId}' AND `type` in ({$moderate_types})", 'order' => 'timestamp DESC'), array(':event_id' => $orderId));
     $moderated = count($events) == 0;
     $this->render('index', array('orderId' => $orderId, 'order' => $order, 'executor' => Zakaz::getExecutor($orderId), 'moderated' => $moderated, 'isGuest' => $isGuest, 'parts' => $parts));
 }
 public function yiichat_list_posts($chat_id, $identity, $last_id, $data)
 {
     $this->_chat_id = $chat_id;
     $this->_identity = $identity;
     $this->_data = $data;
     $messages = ProjectMessages::model()->findAll('`t`.`order` = :chat_id AND `t`.`id` > :last_id', array(':chat_id' => $chat_id, ':last_id' => $last_id));
     foreach ($messages as $m) {
         $m->date = date_format(date_create($m->date), 'd.m.Y H:i:s');
     }
     return $messages;
 }
Example #14
0
<?php

$limit = 5;
$result = ProjectMessages::instance()->listing(array("order" => "name", "order_dir" => "asc", "start" => 0, "limit" => $limit));
$total = $result->total;
$messages = $result->objects;
$genid = gen_id();
if ($total) {
    include_once 'template.php';
}
 /**
  * Edit existing project form
  *
  * @param void
  * @return null
  */
 function edit()
 {
     $this->setTemplate('add_project_form');
     $project_form = ProjectForms::findById(get_id());
     if (!$project_form instanceof ProjectForm) {
         flash_error(lang('project form dnx'));
         if (ProjectForm::canAdd(logged_user(), active_project())) {
             $this->redirectTo('form');
         } else {
             $this->redirectToUrl(active_project()->getOverviewUrl());
         }
         // if
     }
     // if
     if (!$project_form->canEdit(logged_user())) {
         flash_error(lang('no access permissions'));
         if (ProjectForm::canAdd(logged_user(), active_project())) {
             $this->redirectTo('form');
         } else {
             $this->redirectToUrl(active_project()->getOverviewUrl());
         }
         // if
     }
     // if
     $project_form_data = array_var($_POST, 'project_form');
     if (!is_array($project_form_data)) {
         $project_form_data = array('name' => $project_form->getName(), 'description' => $project_form->getDescription(), 'success_message' => $project_form->getSuccessMessage(), 'action' => $project_form->getAction(), 'is_enabled' => $project_form->getIsEnabled(), 'is_visible' => $project_form->getIsVisible());
         // array
         if ($project_form->getAction() == ProjectForm::ADD_COMMENT_ACTION) {
             $project_form_data['message_id'] = $project_form->getInObjectId();
         } else {
             $project_form_data['task_list_id'] = $project_form->getInObjectId();
         }
         // if
     }
     // if
     tpl_assign('project_form', $project_form);
     tpl_assign('project_form_data', $project_form_data);
     if (is_array(array_var($_POST, 'project_form'))) {
         $project_form->setFromAttributes($project_form_data);
         if ($project_form->getAction() == ProjectForm::ADD_COMMENT_ACTION) {
             $in_object = ProjectMessages::findById(get_id('message_id', $project_form_data));
             $relation_error_message = lang('project form select message');
         } else {
             $in_object = ProjectTaskLists::findById(get_id('task_list_id', $project_form_data));
             $relation_error_message = lang('project form select task lists');
         }
         // if
         if (!$in_object instanceof ProjectDataObject) {
             tpl_assign('error', new Error($relation_error_message));
             $this->render();
         }
         // if
         $project_form->setInObjectId($in_object->getObjectId());
         // set related object ID
         try {
             DB::beginWork();
             $project_form->save();
             ApplicationLogs::createLog($project_form, active_project(), ApplicationLogs::ACTION_EDIT, true);
             DB::commit();
             flash_success(lang('success edit project form', $project_form->getName()));
             $this->redirectTo('form');
         } catch (Exception $e) {
             DB::rollback();
             tpl_assign('error', $e);
         }
         // try
     }
     // if
 }
 /**
  * Trash this object and reset all relationship. This function will not trash any of related objects
  *
  * @access public
  * @param void
  * @return boolean
  */
 function trash($trashDate = null)
 {
     $is_template = $this->getIsTemplate();
     if ($is_template) {
         $this->delete();
     } else {
         try {
             DB::execute("UPDATE " . ProjectMessages::instance()->getTableName(true) . " SET `milestone_id` = '0' WHERE `milestone_id` = " . DB::escape($this->getId()));
             DB::execute("UPDATE " . ProjectTasks::instance()->getTableName(true) . " SET `milestone_id` = '0' WHERE `milestone_id` = " . DB::escape($this->getId()));
             return parent::trash($trashDate);
         } catch (Exception $e) {
             throw $e;
         }
         // try
     }
 }
 /**
  *  Вывод и добавление сообщений
  */
 public function actionIndex($orderId)
 {
     $isGuest = Yii::app()->user->guestName;
     if ($isGuest) {
         Yii::app()->theme = 'client';
         $order = Zakaz::model()->resetScope()->findByPk($orderId);
         // если гость прошёл по ссылке на неcуществующий
         // проект, отправляем его на регистрацию
         $url = 'http://' . $_SERVER['SERVER_NAME'] . '/';
         if (!$order) {
             $this->redirect($url);
         }
         $moderate_types = EventHelper::get_moderate_types_string();
         $events = Events::model()->findAll(array('condition' => "`event_id`='{$orderId}' AND `type` in ({$moderate_types})", 'order' => 'timestamp DESC'), array(':event_id' => $orderId));
         $moderated = count($events) == 0;
         // если гость прошёл по ссылке на непромодерированный
         // проект, отправляем его на регистрацию
         if (!$moderated) {
             $this->redirect(Yii::app()->createUrl('user/login'));
         }
         //			Catalog::model()->tableName();
         $this->render('index', array('orderId' => $orderId, 'order' => $order, 'executor' => Zakaz::getExecutor($orderId), 'moderated' => $moderated, 'isGuest' => $isGuest, 'parts' => ZakazParts::model()->findAll(array('condition' => "`proj_id`='{$orderId}'"))));
         Yii::app()->end();
     }
     Yii::app()->session['project_id'] = $orderId;
     if (Yii::app()->request->isAjaxRequest) {
         if (Yii::app()->request->getPost('ProjectMessages')) {
             $model = new ProjectMessages();
             $model->sender = Yii::app()->user->id;
             $model->moderated = 0;
             $model->order = $orderId;
             $post = $_POST['ProjectMessages']['message'];
             $post = str_replace("\r\n", '<br>', $post);
             $post = str_replace("\n", '<br>', $post);
             $_POST['ProjectMessages']['message'] = $post;
             $model->attributes = Yii::app()->request->getPost('ProjectMessages');
             $model->date = date('Y-m-d H:i:s');
             switch ($model->recipient) {
                 case 'manager':
                     $model->recipient = 1;
                     break;
                 case 'customer':
                     if (User::model()->isCustomer()) {
                         $model->recipient = Zakaz::model()->resetScope()->findByPk($orderId)->attributes['executor'];
                     }
                     if (User::model()->isAuthor()) {
                         $model->recipient = Zakaz::model()->findByPk($orderId)->attributes['user_id'];
                     }
                     break;
             }
             $model->save();
             EventHelper::addMessage($orderId, $model->message);
         }
         $this->renderPartial('chat', array('orderId' => $orderId, 'isGuest' => $isGuest));
         Yii::app()->end();
     }
     $moderate_types = EventHelper::get_moderate_types_string();
     $events = Events::model()->findAll(array('condition' => "`event_id`='{$orderId}' AND `type` in ({$moderate_types})", 'order' => 'timestamp DESC'), array(':event_id' => $orderId));
     $moderated = count($events) == 0;
     $this->render('index', array('orderId' => $orderId, 'order' => $order, 'executor' => Zakaz::getExecutor($orderId), 'moderated' => $moderated, 'isGuest' => $isGuest));
 }
 function getMessages($tag, $project = null, $start = null, $limit = null, $order = null, $order_dir = null, $archived = false)
 {
     switch ($order) {
         case 'updatedOn':
             $order_crit = 'updated_on';
             break;
         case 'createdOn':
             $order_crit = 'created_on';
             break;
         case 'title':
             $order_crit = 'title';
             break;
         default:
             $order_crit = 'updated_on';
             break;
     }
     if (!$order_dir) {
         switch ($order) {
             case 'name':
                 $order_dir = 'ASC';
                 break;
             default:
                 $order_dir = 'DESC';
         }
     }
     if ($project instanceof Project) {
         $pids = $project->getAllSubWorkspacesQuery(!$archived);
         $wsConditions = " AND " . self::getWorkspaceString($pids);
     } else {
         $wsConditions = "";
     }
     if (!isset($tag) || $tag == '' || $tag == null) {
         $tagstr = "";
     } else {
         $tagstr = "AND (SELECT count(*) FROM `" . TABLE_PREFIX . "tags` WHERE `" . TABLE_PREFIX . "project_messages`.`id` = `" . TABLE_PREFIX . "tags`.`rel_object_id` AND `" . TABLE_PREFIX . "tags`.`tag` = " . DB::escape($tag) . " AND `" . TABLE_PREFIX . "tags`.`rel_object_manager` ='ProjectMessages' ) > 0 ";
     }
     $permissions = ' AND ( ' . permissions_sql_for_listings(ProjectMessages::instance(), ACCESS_LEVEL_READ, logged_user(), 'project_id') . ')';
     if ($archived) {
         $archived_cond = "`archived_by_id` <> 0";
     } else {
         $archived_cond = "`archived_by_id` = 0";
     }
     $conditions = "`trashed_by_id` = 0 AND {$archived_cond} {$wsConditions} {$tagstr}  {$permissions}";
     $page = (int) ($start / $limit) + 1;
     $order = "{$order_crit} {$order_dir}";
     return self::paginate(array('conditions' => $conditions, 'order' => $order), $limit, $page);
 }
 /**
  * Check if specific user can add messages to specific project
  *
  * @access public
  * @param User $user
  * @param Project $project
  * @return booelean
  */
 function canAdd(User $user, Project $project)
 {
     return can_add($user, $project, get_class(ProjectMessages::instance()));
 }
 /**
  * Returns array of queries that will return Dashboard Objects
  *
  * @param string $proj_ids
  * @param string $tag
  * @param boolean $count if false the query will return objects, if true it will return object count
  */
 static function getDashboardObjectQueries($project = null, $tag = null, $count = false, $trashed = false, $linkedObject = null, $order = 'updatedOn', $filterName = '', $archived = false, $filterManager = '')
 {
     if ($trashed && $trashed !== 'all') {
         $order = 'trashedOn';
     } else {
         if ($archived) {
             $order = 'archivedOn';
         }
     }
     switch ($order) {
         case 'dateCreated':
             $order_crit_companies = '`created_on`';
             $order_crit_contacts = '`created_on`';
             $order_crit_file_revisions = '`created_on`';
             $order_crit_calendar = '`created_on`';
             $order_crit_tasks = '`created_on`';
             $order_crit_milestones = '`created_on`';
             $order_crit_webpages = '`created_on`';
             $order_crit_files = '`created_on`';
             $order_crit_emails = '`received_date`';
             $order_crit_comments = '`created_on`';
             $order_crit_messages = '`created_on`';
             $order_crit_workspaces = '`created_on`';
             break;
         case 'trashedOn':
             $order_crit_companies = '`trashed_on`';
             $order_crit_contacts = '`trashed_on`';
             $order_crit_file_revisions = '`trashed_on`';
             $order_crit_calendar = '`trashed_on`';
             $order_crit_tasks = '`trashed_on`';
             $order_crit_milestones = '`trashed_on`';
             $order_crit_webpages = '`trashed_on`';
             $order_crit_files = '`trashed_on`';
             $order_crit_emails = '`trashed_on`';
             $order_crit_comments = '`trashed_on`';
             $order_crit_messages = '`trashed_on`';
             $order_crit_workspaces = '`updated_on`';
             break;
         case 'archivedOn':
             $order_crit_companies = '`archived_on`';
             $order_crit_contacts = '`archived_on`';
             $order_crit_file_revisions = '`updated_on`';
             $order_crit_calendar = '`archived_on`';
             $order_crit_tasks = '`archived_on`';
             $order_crit_milestones = '`archived_on`';
             $order_crit_webpages = '`archived_on`';
             $order_crit_files = '`archived_on`';
             $order_crit_emails = '`archived_on`';
             $order_crit_comments = '`updated_on`';
             $order_crit_messages = '`archived_on`';
             $order_crit_workspaces = '`completed_on`';
             break;
         case 'name':
             $order_crit_companies = '`name`';
             $order_crit_contacts = "TRIM(CONCAT(' ', `lastname`, `firstname`, `middlename`))";
             $order_crit_file_revisions = "'zzzzzzzzzzzzzz'";
             //Revisar
             $order_crit_calendar = '`subject`';
             $order_crit_tasks = '`title`';
             $order_crit_milestones = '`name`';
             $order_crit_webpages = '`title`';
             $order_crit_files = '`filename`';
             $order_crit_emails = '`subject`';
             $order_crit_comments = '`text`';
             $order_crit_messages = '`title`';
             $order_crit_workspaces = '`name`';
             break;
         default:
             $order_crit_companies = '`updated_on`';
             $order_crit_contacts = '`updated_on`';
             $order_crit_file_revisions = '`updated_on`';
             $order_crit_calendar = '`updated_on`';
             $order_crit_tasks = '`updated_on`';
             $order_crit_milestones = '`updated_on`';
             $order_crit_webpages = '`updated_on`';
             $order_crit_files = '`updated_on`';
             $order_crit_emails = '`received_date`';
             $order_crit_comments = '`updated_on`';
             $order_crit_messages = '`updated_on`';
             $order_crit_workspaces = '`updated_on`';
             break;
     }
     if ($project instanceof Project) {
         $proj_ids = $project->getAllSubWorkspacesQuery(true);
         $proj_cond_companies = Companies::getWorkspaceString($proj_ids);
         $proj_cond_messages = ProjectMessages::getWorkspaceString($proj_ids);
         $proj_cond_documents = ProjectFiles::getWorkspaceString($proj_ids);
         $proj_cond_emails = MailContents::getWorkspaceString($proj_ids);
         $proj_cond_events = ProjectEvents::getWorkspaceString($proj_ids);
         $proj_cond_tasks = ProjectTasks::getWorkspaceString($proj_ids);
         $proj_cond_charts = ProjectCharts::getWorkspaceString($proj_ids);
         $proj_cond_milestones = ProjectMilestones::getWorkspaceString($proj_ids);
         $proj_cond_weblinks = ProjectWebpages::getWorkspaceString($proj_ids);
         $proj_cond_contacts = Contacts::getWorkspaceString($proj_ids);
     } else {
         $proj_cond_companies = "true";
         $proj_cond_messages = "true";
         $proj_cond_documents = "true";
         $proj_cond_emails = "true";
         $proj_cond_events = "true";
         $proj_cond_tasks = "true";
         $proj_cond_charts = "true";
         $proj_cond_milestones = "true";
         $proj_cond_weblinks = "true";
         $proj_cond_contacts = "true";
     }
     if ($trashed) {
         if ($trashed === 'all') {
             $trashed_cond = '`trashed_on` >= ' . DB::escape(EMPTY_DATETIME);
         } else {
             $trashed_cond = '`trashed_on` > ' . DB::escape(EMPTY_DATETIME);
         }
         $archived_cond = '1 = 1';
         // Show all objects in trash
         $comments_arch_cond = "1 = 1";
     } else {
         $trashed_cond = '`trashed_on` = ' . DB::escape(EMPTY_DATETIME);
         if ($archived) {
             $archived_cond = "`archived_by_id` > 0";
             $comments_arch_cond = "1 = 0";
             // Don't show comments in archived objects listings
         } else {
             $archived_cond = "`archived_by_id` = 0";
             $comments_arch_cond = "1 = 1";
         }
     }
     if (isset($tag) && $tag && $tag != '') {
         $tag_str = " AND EXISTS (SELECT * FROM `" . TABLE_PREFIX . "tags` `t` WHERE `tag`= " . DB::escape($tag) . " AND `co`.`id` = `t`.`rel_object_id` AND `t`.`rel_object_manager` = `object_manager_value`) ";
     } else {
         $tag_str = ' ';
     }
     if ($linkedObject instanceof ProjectDataObject) {
         $link_id = $linkedObject->getId();
         $link_mgr = get_class($linkedObject->manager());
         $link_str = " AND EXISTS (SELECT * FROM `" . TABLE_PREFIX . "linked_objects` `t` WHERE\n\t\t\t(`t`.`object_id`=" . DB::escape($link_id) . " AND `t`.object_manager = " . DB::escape($link_mgr) . " AND `co`.`id` = `t`.`rel_object_id` AND `t`.`rel_object_manager` = `object_manager_value`) OR\n\t\t\t(`t`.`rel_object_id`=" . DB::escape($link_id) . " AND `t`.rel_object_manager = " . DB::escape($link_mgr) . " AND `co`.`id` = `t`.`object_id` AND `t`.`object_manager` = `object_manager_value`)) ";
     } else {
         $link_str = ' ';
     }
     $tag_str .= $link_str;
     $res = array();
     /** If the name of the query ends with Comments it is assumed to be a list of Comments **/
     $cfn = '';
     if ($filterName != '') {
         $cfn = " AND text LIKE '%" . $filterName . "%'";
     }
     // Notes
     if (module_enabled('notes')) {
         $fn = '';
         if ($filterName != '') {
             $fn = " AND title LIKE '%" . $filterName . "%'";
         }
         $permissions = ' AND ( ' . permissions_sql_for_listings(ProjectMessages::instance(), ACCESS_LEVEL_READ, logged_user(), '`project_id`', '`co`') . ')';
         if ($filterManager == '' || $filterManager == "ProjectMessages") {
             $res['ProjectMessages'] = "SELECT  'ProjectMessages' AS `object_manager_value`, `id` AS `oid`, {$order_crit_messages} AS `order_value` FROM `" . TABLE_PREFIX . "project_messages` `co` WHERE " . $trashed_cond . " AND {$archived_cond} AND " . $proj_cond_messages . str_replace('= `object_manager_value`', "= 'ProjectMessages'", $tag_str) . $permissions . $fn;
         }
         if ($filterManager == '' || $filterManager == "Comments") {
             $res['ProjectMessagesComments'] = "SELECT  'Comments' AS `object_manager_value`, `id` AS `oid`, {$order_crit_comments} AS `order_value` FROM `" . TABLE_PREFIX . "comments` WHERE {$trashed_cond} AND `rel_object_manager` = 'ProjectMessages' AND `rel_object_id` IN (SELECT `co`.`id` FROM `" . TABLE_PREFIX . "project_messages` `co` WHERE `trashed_by_id` = 0 AND {$comments_arch_cond} AND " . $proj_cond_messages . str_replace('= `object_manager_value`', "= 'ProjectMessages'", $tag_str) . $permissions . $cfn . ")";
         }
     }
     // Events
     if (module_enabled("calendar")) {
         $fn = '';
         if ($filterName != '') {
             $fn = " AND subject LIKE '%" . $filterName . "%'";
         }
         $permissions = ' AND ( ' . permissions_sql_for_listings(ProjectEvents::instance(), ACCESS_LEVEL_READ, logged_user(), '`project_id`', '`co`') . ')';
         if ($filterManager == '' || $filterManager == "ProjectEvents") {
             $res['ProjectEvents'] = "SELECT  'ProjectEvents' AS `object_manager_value`, `id` AS `oid`, {$order_crit_calendar} AS `order_value` FROM `" . TABLE_PREFIX . "project_events` `co` WHERE  " . $trashed_cond . " AND {$archived_cond} AND " . $proj_cond_events . str_replace('= `object_manager_value`', "= 'ProjectEvents'", $tag_str) . $permissions . $fn;
         }
         if ($filterManager == '' || $filterManager == "Comments") {
             $res['ProjectEventsComments'] = "SELECT  'Comments' AS `object_manager_value`, `id` AS `oid`, {$order_crit_comments} AS `order_value` FROM `" . TABLE_PREFIX . "comments` WHERE {$trashed_cond} AND `rel_object_manager` = 'ProjectEvents' AND `rel_object_id` IN (SELECT `co`.`id` FROM `" . TABLE_PREFIX . "project_events` `co` WHERE `trashed_by_id` = 0 AND {$comments_arch_cond} AND " . $proj_cond_events . str_replace('= `object_manager_value`', "= 'ProjectEvents'", $tag_str) . $permissions . $cfn . ")";
         }
     }
     // Documents
     if (module_enabled("documents")) {
         $fn = '';
         if ($filterName != '') {
             $fn = " AND filename LIKE '%" . $filterName . "%'";
         }
         $permissions = ' AND ( ' . permissions_sql_for_listings(ProjectFiles::instance(), ACCESS_LEVEL_READ, logged_user(), '`project_id`', '`co`') . ')';
         $typestring = array_var($_GET, "typestring");
         if ($typestring) {
             $typecond = " AND  ((SELECT count(*) FROM `" . TABLE_PREFIX . "project_file_revisions` `pfr` WHERE `" . "pfr`.`type_string` LIKE " . DB::escape($typestring) . " AND `" . "co`.`id` = `pfr`.`file_id`) > 0)";
         } else {
             $typecond = "";
         }
         if ($filterManager == '' || $filterManager == "ProjectFiles") {
             $res['ProjectFiles'] = "SELECT  'ProjectFiles' AS `object_manager_value`, `id` as `oid`, {$order_crit_files} AS `order_value` FROM `" . TABLE_PREFIX . "project_files` `co` WHERE " . $trashed_cond . " AND {$archived_cond} AND " . $proj_cond_documents . str_replace('= `object_manager_value`', "= 'ProjectFiles'", $tag_str) . $permissions . $typecond . $fn;
         }
         if ($filterManager == '' || $filterManager == "Comments") {
             $res['ProjectFilesComments'] = "SELECT  'Comments' AS `object_manager_value`, `id` AS `oid`, {$order_crit_comments} AS `order_value` FROM `" . TABLE_PREFIX . "comments` WHERE {$trashed_cond} AND `rel_object_manager` = 'ProjectFiles' AND `rel_object_id` IN (SELECT `co`.`id` FROM `" . TABLE_PREFIX . "project_files` `co` WHERE `trashed_by_id` = 0 AND {$comments_arch_cond} AND " . $proj_cond_documents . str_replace('= `object_manager_value`', "= 'ProjectFiles'", $tag_str) . $permissions . $cfn . ")";
         }
         if ($trashed) {
             $file_rev_docs = "SELECT `id` FROM `" . TABLE_PREFIX . "project_files` `co` WHERE `trashed_by_id` = 0 AND " . $proj_cond_documents . str_replace('= `object_manager_value`', "= 'ProjectFiles'", $tag_str) . $permissions . $typecond;
             $res['FileRevisions'] = "SELECT 'ProjectFileRevisions' AS `object_manager_value`, `id` AS `oid`, {$order_crit_file_revisions} AS `order_value` FROM `" . TABLE_PREFIX . "project_file_revisions` `co` WHERE {$trashed_cond} AND `file_id` IN (" . $file_rev_docs . ")";
         }
     }
     // Tasks and Milestones
     if (module_enabled("tasks")) {
         $fn = '';
         if ($filterName != '') {
             $fn = " AND title LIKE '%" . $filterName . "%'";
         }
         $completed = $trashed || $archived ? '' : 'AND `completed_on` = ' . DB::escape(EMPTY_DATETIME);
         $permissions = ' AND ( ' . permissions_sql_for_listings(ProjectTasks::instance(), ACCESS_LEVEL_READ, logged_user(), '`project_id`', '`co`') . ')';
         if ($filterManager == '' || $filterManager == "ProjectTasks") {
             $res['ProjectTasks'] = "SELECT  'ProjectTasks' AS `object_manager_value`, `id` AS `oid`, {$order_crit_tasks} AS `order_value` FROM `" . TABLE_PREFIX . "project_tasks` `co` WHERE `is_template` = false {$completed} AND " . $trashed_cond . " AND {$archived_cond} AND `is_template` = false AND " . $proj_cond_tasks . str_replace('= `object_manager_value`', "= 'ProjectTasks'", $tag_str) . $permissions . $fn;
         }
         if ($filterManager == '' || $filterManager == "Comments") {
             $res['ProjectTasksComments'] = "SELECT  'Comments' AS `object_manager_value`, `id` AS `oid`, {$order_crit_comments} AS `order_value` FROM `" . TABLE_PREFIX . "comments` WHERE {$trashed_cond} AND `rel_object_manager` = 'ProjectTasks' AND `rel_object_id` IN (SELECT `co`.`id` FROM `" . TABLE_PREFIX . "project_tasks` `co` WHERE `trashed_by_id` = 0 AND {$comments_arch_cond} AND `is_template` = false AND " . $proj_cond_tasks . str_replace('= `object_manager_value`', "= 'ProjectTasks'", $tag_str) . $permissions . $cfn . ")";
         }
         $fn = '';
         if ($filterName != '') {
             $fn = " AND name LIKE '%" . $filterName . "%'";
         }
         $permissions = ' AND ( ' . permissions_sql_for_listings(ProjectMilestones::instance(), ACCESS_LEVEL_READ, logged_user(), '`project_id`', '`co`') . ')';
         if ($filterManager == '' || $filterManager == "ProjectMilestones") {
             $res['ProjectMilestones'] = "SELECT  'ProjectMilestones' AS `object_manager_value`, `id` AS `oid`, {$order_crit_milestones} AS `order_value` FROM `" . TABLE_PREFIX . "project_milestones` `co` WHERE " . $trashed_cond . " AND {$archived_cond} AND `is_template` = false AND " . $proj_cond_milestones . str_replace('= `object_manager_value`', "= 'ProjectMilestones'", $tag_str) . $permissions . $fn;
         }
         if ($filterManager == '' || $filterManager == "Comments") {
             $res['ProjectMilestonesComments'] = "SELECT  'Comments' AS `object_manager_value`, `id` AS `oid`, {$order_crit_comments} AS `order_value` FROM `" . TABLE_PREFIX . "comments` WHERE {$trashed_cond} AND `rel_object_manager` = 'ProjectMilestones' AND `rel_object_id` IN (SELECT `co`.`id` FROM `" . TABLE_PREFIX . "project_milestones` `co` WHERE `trashed_by_id` = 0 AND {$comments_arch_cond} AND `is_template` = false AND " . $proj_cond_milestones . str_replace('= `object_manager_value`', "= 'ProjectMilestones'", $tag_str) . $permissions . $cfn . ")";
         }
     }
     // Weblinks
     if (module_enabled("weblinks")) {
         $fn = '';
         if ($filterName != '') {
             $fn = " AND title LIKE '%" . $filterName . "%'";
         }
         $permissions = ' AND ( ' . permissions_sql_for_listings(ProjectWebpages::instance(), ACCESS_LEVEL_READ, logged_user(), '`project_id`', '`co`') . ')';
         if ($filterManager == '' || $filterManager == "ProjectWebpages") {
             $res['ProjectWebPages'] = "SELECT  'ProjectWebPages' AS `object_manager_value`, `id` AS `oid`, {$order_crit_webpages} AS `order_value` FROM `" . TABLE_PREFIX . "project_webpages` `co` WHERE " . $trashed_cond . " AND {$archived_cond} AND " . $proj_cond_weblinks . str_replace('= `object_manager_value`', "= 'ProjectWebpages'", $tag_str) . $permissions . $fn;
         }
         if ($filterManager == '' || $filterManager == "Comments") {
             $res['ProjectWebPagesComments'] = "SELECT  'Comments' AS `object_manager_value`, `id` AS `oid`, {$order_crit_comments} AS `order_value` FROM `" . TABLE_PREFIX . "comments` WHERE {$trashed_cond} AND `rel_object_manager` = 'ProjectWebpages' AND `rel_object_id` IN (SELECT `co`.`id` FROM `" . TABLE_PREFIX . "project_webpages` `co` WHERE " . $trashed_cond . " AND {$comments_arch_cond} AND " . $proj_cond_weblinks . str_replace('= `object_manager_value`', "= 'ProjectWebpages'", $tag_str) . $permissions . $cfn . ")";
         }
     }
     // Email
     if (module_enabled("email")) {
         $fn = '';
         if ($filterName != '') {
             $fn = " AND subject LIKE '%" . $filterName . "%'";
         }
         $permissions = ' AND ( ' . permissions_sql_for_listings(MailContents::instance(), ACCESS_LEVEL_READ, logged_user(), $project instanceof Project ? $project->getId() : 0, '`co`') . ')';
         if ($filterManager == '' || $filterManager == "MailContents") {
             $res['MailContents'] = "SELECT  'MailContents' AS `object_manager_value`, `id` AS `oid`, {$order_crit_emails} AS `order_value` FROM `" . TABLE_PREFIX . "mail_contents` `co` WHERE (" . $trashed_cond . " AND {$archived_cond} AND `is_deleted` = 0 AND " . $proj_cond_emails . str_replace('= `object_manager_value`', "= 'MailContents'", $tag_str) . $permissions . ") {$fn}";
         }
         if ($filterManager == '' || $filterManager == "Comments") {
             $res['MailContentsComments'] = "SELECT  'Comments' AS `object_manager_value`, `id` AS `oid`, {$order_crit_comments} AS `order_value` FROM `" . TABLE_PREFIX . "comments` WHERE {$trashed_cond} AND `rel_object_manager` = 'MailContents' AND `rel_object_id` IN (SELECT `co`.`id` FROM `" . TABLE_PREFIX . "mail_contents` `co` WHERE `trashed_by_id` = 0 AND {$comments_arch_cond} AND " . $proj_cond_emails . str_replace('= `object_manager_value`', "= 'MailContents'", $tag_str) . $permissions . $cfn . ")";
         }
     }
     // Conacts and Companies
     if (module_enabled("contacts")) {
         $fn = '';
         $fn2 = '';
         if ($filterName != '') {
             $fn = " AND firstname LIKE '%" . $filterName . "%'";
             $fn2 = " AND name LIKE '%" . $filterName . "%'";
         }
         // companies
         $permissions = ' AND ( ' . permissions_sql_for_listings(Companies::instance(), ACCESS_LEVEL_READ, logged_user(), '`project_id`', '`co`') . ')';
         if ($filterManager == '' || $filterManager == "Companies") {
             $res['Companies'] = "SELECT  'Companies' AS `object_manager_value`, `id` as `oid`, {$order_crit_companies} AS `order_value` FROM `" . TABLE_PREFIX . "companies` `co` WHERE " . $trashed_cond . " AND {$archived_cond} AND " . $proj_cond_companies . str_replace('= `object_manager_value`', "= 'Companies'", $tag_str) . $permissions . $fn2;
         }
         $res['CompaniesComments'] = "SELECT  'Comments' AS `object_manager_value`, `id` AS `oid`, {$order_crit_comments} AS `order_value` FROM `" . TABLE_PREFIX . "comments` WHERE {$trashed_cond} AND `rel_object_manager` = 'Companies' AND `rel_object_id` IN (SELECT `co`.`id` FROM `" . TABLE_PREFIX . "companies` `co` WHERE `trashed_by_id` = 0 AND {$comments_arch_cond} AND " . $proj_cond_documents . str_replace('= `object_manager_value`', "= 'Companies'", $tag_str) . $permissions . $cfn . ")";
         // contacts
         $permissions = ' AND ( ' . permissions_sql_for_listings(Contacts::instance(), ACCESS_LEVEL_READ, logged_user(), '`project_id`', '`co`') . ')';
         if ($filterManager == '' || $filterManager == "Contacts") {
             $res['Contacts'] = "SELECT 'Contacts' AS `object_manager_value`, `id` AS `oid`, {$order_crit_contacts} AS `order_value` FROM `" . TABLE_PREFIX . "contacts` `co` WHERE {$trashed_cond} AND {$archived_cond} AND {$proj_cond_contacts} " . str_replace('= `object_manager_value`', "= 'Contacts'", $tag_str) . $permissions . $fn;
         }
         $res['ContactsComments'] = "SELECT  'Comments' AS `object_manager_value`, `id` AS `oid`, {$order_crit_comments} AS `order_value` FROM `" . TABLE_PREFIX . "comments` WHERE {$trashed_cond} AND `rel_object_manager` = 'Contacts' AND `rel_object_id` IN (SELECT `co`.`id` FROM `" . TABLE_PREFIX . "contacts` `co` WHERE `trashed_by_id` = 0 AND {$comments_arch_cond} AND " . $proj_cond_documents . str_replace('= `object_manager_value`', "= 'Contacts'", $tag_str) . $permissions . $cfn . ")";
     }
     // Workspaces (only for archived objects view)
     if ($archived) {
         if ($filterManager == '' || $filterManager == "Projects") {
             $res['Projects'] = "SELECT  'Projects' AS `object_manager_value`, `id` AS `oid`, {$order_crit_workspaces} AS `order_value` FROM `" . TABLE_PREFIX . "projects` `co` WHERE `completed_on` <> " . DB::escape(EMPTY_DATETIME) . " AND `id` IN (" . logged_user()->getWorkspacesQuery() . ")";
         }
     }
     if ($count) {
         foreach ($res as $p => $q) {
             $res[$p] = "SELECT count(*) AS `quantity`, '{$p}' AS `objectName` FROM ( {$q} ) `table_alias`";
         }
     }
     return $res;
 }
 public function yiichat_list_posts($chat_id, $identity, $last_id, $data)
 {
     $res = parent::yiichat_list_posts($chat_id, $identity, $last_id, $data);
     if (count($res) > 0) {
         $order = Zakaz::model()->findByPk($chat_id);
     }
     foreach ($res as $k => $v) {
         $res1[$k] = $v->attributes;
         $res1[$k]['sender'] = array();
         $res1[$k]['sender']['fullusername'] = $res[$k]->senderObject->email;
         if ($res[$k]->senderObject) {
             $res1[$k]['sender']['superuser'] = $res[$k]->senderObject->getRelated('AuthAssignment')->attributes;
         }
         // При удалённом пользователе необходима проверка
         $res1[$k]['sender']['rating'] = (int) $res[$k]->senderObject->profile->rating;
         switch ($res1[$k]['sender']['superuser']['itemname']) {
             case 'Admin':
                 $res1[$k]['sender']['username'] = ProjectModule::t('Admin');
                 //'Админ';
                 break;
             case 'Manager':
                 $res1[$k]['sender']['username'] = ProjectModule::t('Manager');
                 //'Менеджер';
                 break;
             case 'Author':
                 if (ProjectMessages::model()->getRole($res1[$k]['sender_role']) == 'Corrector') {
                     $res1[$k]['sender']['username'] = ProjectModule::t('Corrector');
                 } else {
                     $res1[$k]['sender']['username'] = ProjectModule::t('Executor');
                 }
                 //'Автор';
                 break;
             case 'Customer':
                 $res1[$k]['sender']['username'] = ProjectModule::t('Customer');
                 //'Заказчик';
                 break;
         }
         $res1[$k]['sender']['username'] = $res1[$k]['sender']['fullusername'];
         if ($res[$k]->recipient > 0) {
             $res1[$k]['recipient'] = array();
             $res1[$k]['recipient']['fullusername'] = $res[$k]->recipientObject->email;
             $res1[$k]['recipient']['superuser'] = $res[$k]->recipientObject->getRelated('AuthAssignment')->attributes;
             switch ($res1[$k]['recipient']['superuser']['itemname']) {
                 case 'Admin':
                     $res1[$k]['recipient']['username'] = ProjectModule::t('to admin');
                     //'админу';
                     break;
                 case 'Manager':
                     $res1[$k]['recipient']['username'] = ProjectModule::t('to manager');
                     //'менеджеру';
                     break;
                 case 'Author':
                     if (ProjectMessages::model()->getRole($res1[$k]['recipient_role']) == 'Corrector') {
                         $res1[$k]['recipient']['username'] = ProjectModule::t('to corrector');
                     } else {
                         $res1[$k]['recipient']['username'] = ProjectModule::t('to executor');
                     }
                     //'автору';
                     break;
                 case 'Customer':
                     $res1[$k]['recipient']['username'] = ProjectModule::t('to customer');
                     //'заказчику';
                     break;
             }
             //$res1[$k]['recipient']['username']=$res1[$k]['recipient']['fullusername'];
         }
         if ($res1[$k]['sender_role']) {
             $res1[$k]['sender_role'] = ProjectMessages::model()->getRole($res1[$k]['sender_role']);
         }
     }
     return $res1;
 }
 /**
  *  Вывод и добавление сообщений
  */
 public function actionIndex($orderId, $role = null)
 {
     $isCorrector = $role == 'Corrector' ? 1 : 0;
     $isGuest = Yii::app()->user->isGuest;
     if ($isGuest) {
         $url = 'http://' . $_SERVER['SERVER_NAME'] . '/user/login';
         $this->redirect($url);
     }
     Yii::app()->session['project_id'] = $orderId;
     $order = Zakaz::model()->resetScope()->findByPk($orderId);
     if (Yii::app()->request->isAjaxRequest) {
         if (Yii::app()->request->getPost('ProjectMessages')) {
             $id = (int) $_POST['ProjectMessages']['id'];
             if ($id > 0) {
                 // редактирование сообщения
                 $model = ProjectMessages::model()->findByPk($id);
             } else {
                 // новое сообщение
                 $model = new ProjectMessages();
                 $model->sender = Yii::app()->user->id;
                 $model->moderated = 0;
                 $model->order = $orderId;
             }
             $post = $_POST['ProjectMessages']['message'];
             $post = str_replace("\r\n", '<br>', $post);
             $post = str_replace("\n", '<br>', $post);
             $_POST['ProjectMessages']['message'] = $post;
             $model->attributes = Yii::app()->request->getPost('ProjectMessages');
             $model->date = date('Y-m-d H:i:s');
             switch ($model->recipient) {
                 case 'author_to_manager':
                     $model->sender_role = ProjectMessages::model()->getRoleId('Author');
                     $model->recipient_role = ProjectMessages::model()->getRoleId('Admin');
                     $model->recipient = 1;
                     break;
                 case 'customer_to_manager':
                     $model->sender_role = ProjectMessages::model()->getRoleId('Customer');
                     $model->recipient_role = ProjectMessages::model()->getRoleId('Admin');
                     $model->recipient = 1;
                     break;
                 case 'corrector_to_manager':
                     $model->sender_role = ProjectMessages::model()->getRoleId('Corrector');
                     $model->recipient_role = ProjectMessages::model()->getRoleId('Admin');
                     $model->recipient = 1;
                     break;
                 case 'author_to_customer':
                     $model->sender_role = ProjectMessages::model()->getRoleId('Author');
                     $model->recipient_role = ProjectMessages::model()->getRoleId('Customer');
                     $model->recipient = Zakaz::model()->findByPk($orderId)->attributes['user_id'];
                     break;
                 case 'corrector_to_customer':
                     $model->sender_role = ProjectMessages::model()->getRoleId('Corrector');
                     $model->recipient_role = ProjectMessages::model()->getRoleId('Customer');
                     $model->recipient = Zakaz::model()->findByPk($orderId)->attributes['user_id'];
                     break;
                 case 'customer_to_author':
                     $model->sender_role = ProjectMessages::model()->getRoleId('Customer');
                     $model->recipient_role = ProjectMessages::model()->getRoleId('Author');
                     $model->recipient = Zakaz::model()->resetScope()->findByPk($orderId)->attributes['executor'];
                     break;
                 case 'corrector_to_author':
                     $model->sender_role = ProjectMessages::model()->getRoleId('Corrector');
                     $model->recipient_role = ProjectMessages::model()->getRoleId('Author');
                     $model->recipient = Zakaz::model()->resetScope()->findByPk($orderId)->attributes['executor'];
                     break;
                 case 'author_to_corrector':
                     $model->sender_role = ProjectMessages::model()->getRoleId('Author');
                     $model->recipient_role = ProjectMessages::model()->getRoleId('Corrector');
                     $model->recipient = -2;
                     break;
                 case 'customer_to_corrector':
                     $model->sender_role = ProjectMessages::model()->getRoleId('Customer');
                     $model->recipient_role = ProjectMessages::model()->getRoleId('Corrector');
                     $model->recipient = -2;
                     break;
             }
             $model->save();
             EventHelper::addMessage($orderId, $model->message);
         }
         $this->renderPartial('chat', array('order' => $order, 'orderId' => $orderId, 'isGuest' => $isGuest));
         Yii::app()->end();
     }
     if (User::model()->isAuthor() && (!User::model()->isCorrector() || !$order->technicalspec) && !User::model()->isExecutor($orderId)) {
         $this->redirect(Yii::app()->createUrl('/project/chat/view', array('orderId' => $orderId)));
     }
     if (User::model()->isCustomer() && $order->user_id != Yii::app()->user->id) {
         $this->redirect('/');
     }
     $parts = ZakazParts::model()->findAll(array('condition' => "`proj_id`='{$orderId}'"));
     if (User::model()->isExecutor($order->id)) {
         $order->executor_event = null;
     }
     if (User::model()->isCustomer()) {
         $order->customer_event = null;
     }
     $order->save(false);
     $moderate_types = EventHelper::get_moderate_types_string();
     $events = Events::model()->findAll(array('condition' => "`event_id`='{$orderId}' AND `type` in ({$moderate_types})", 'order' => 'timestamp DESC'), array(':event_id' => $orderId));
     $PaymentImages = PaymentImage::model()->findAll(array('condition' => "`project_id`='{$orderId}'"));
     $moderated = count($events) == 0;
     $this->render('index', array('orderId' => $orderId, 'order' => $order, 'executor' => Zakaz::getExecutor($orderId), 'moderated' => $moderated, 'parts' => $parts, 'PaymentImages' => $PaymentImages, 'isCorrector' => $isCorrector));
 }
 function canAdd(Contact $user, $context, &$notAllowedMember = '')
 {
     return can_add($user, $context, ProjectMessages::instance()->getObjectTypeId(), $notAllowedMember);
 }
 private function save_object($request)
 {
     $response = false;
     if (!empty($request['args'])) {
         $service = $request['srv'];
         switch ($service) {
             case "task":
                 if ($request['args']['id']) {
                     $object = ProjectTasks::instance()->findByid($request['args']['id']);
                 } else {
                     $object = new ProjectTask();
                 }
                 if ($object instanceof ProjectTask) {
                     if (!empty($request['args']['title'])) {
                         $object->setObjectName($request['args']['title']);
                     }
                     if (!empty($request['args']['description'])) {
                         $object->setText($request['args']['description']);
                     }
                     if (!empty($request['args']['due_date'])) {
                         if ($request['args']['due_date'] != '' && $request['args']['due_date'] != date_format_tip('dd/mm/yyyy')) {
                             $date_format = 'dd/mm/yyyy';
                             $object->setDueDate(DateTimeValueLib::dateFromFormatAndString($date_format, $value));
                         }
                     }
                     if (!empty($request['args']['completed'])) {
                         $object->setPercentCompleted($request['args']['completed']);
                     }
                     if (!empty($request['args']['assign_to'])) {
                         $object->setAssignedToContactId($request['args']['assign_to']);
                     }
                     if (!empty($request['args']['priority'])) {
                         $object->setPriority($request['args']['priority']);
                     }
                 }
                 break;
             case 'note':
                 if ($request['args']['id']) {
                     $object = ProjectMessages::instance()->findByid($request['args']['id']);
                 } else {
                     $object = new ProjectMessage();
                 }
                 if ($object instanceof ProjectMessage) {
                     if (!empty($request['args']['title'])) {
                         $object->setObjectName($request['args']['title']);
                     }
                     if (!empty($request['args']['title'])) {
                         $object->setText($request['args']['text']);
                     }
                 }
                 break;
         }
         // END SWITCH
         if ($object) {
             try {
                 $context = array();
                 $members = array();
                 if (!empty($request['args']['members'])) {
                     $members = $request['args']['members'];
                     $context = get_context_from_array($members);
                 }
                 //Check permissions:
                 if ($request['args']['id'] && $object->canEdit(logged_user()) || !$request['args']['id'] && $object->canAdd(logged_user(), $context)) {
                     DB::beginWork();
                     $object->save();
                     $object_controller = new ObjectController();
                     if (!$request['args']['id']) {
                         $object_controller->add_to_members($object, $members);
                     }
                     DB::commit();
                     $response = true;
                 }
             } catch (Exception $e) {
                 DB::rollback();
                 return false;
             }
         }
     }
     return $this->response('json', $response);
 }
 /**
  * Add comment
  *
  * @access public
  * @param void
  * @return null
  */
 function add_comment()
 {
     $message = ProjectMessages::findById(get_id());
     if (!$message instanceof ProjectMessage) {
         flash_error(lang('message dnx'));
         $this->redirectTo('message');
     }
     // if
     if (!$message->canAddComment(logged_user())) {
         flash_error(lang('no access permissions'));
         $this->redirectToUrl($message->getViewUrl());
     }
     // if
     $comment = new MessageComment();
     $comment_data = array_var($_POST, 'comment');
     tpl_assign('message', $message);
     tpl_assign('comment', $comment);
     tpl_assign('comment_data', $comment_data);
     if (is_array($comment_data)) {
         $comment->setFromAttributes($comment_data);
         $comment->setMessageId($message->getId());
         if (!logged_user()->isMemberOfOwnerCompany()) {
             $comment->setIsPrivate(false);
         }
         try {
             DB::beginWork();
             $comment->save();
             ApplicationLogs::createLog($comment, active_project(), ApplicationLogs::ACTION_ADD);
             DB::commit();
             // Try to send notification but don't break
             try {
                 Notifier::newMessageComment($comment);
             } catch (Exception $e) {
             }
             // try
             flash_success(lang('success add comment'));
             $this->redirectToUrl($message->getViewUrl());
         } catch (Exception $e) {
             DB::rollback();
             tpl_assign('error', $e);
         }
         // try
     }
     // if
 }
 /**
  * Return manager instance
  *
  * @access protected
  * @param void
  * @return ProjectMessages 
  */
 function manager()
 {
     if (!$this->manager instanceof ProjectMessages) {
         $this->manager = ProjectMessages::instance();
     }
     return $this->manager;
 }
Example #27
0
 /**
  * Return array of important messages
  *
  * @param void
  * @return array
  */
 function getImportantMessages()
 {
     if (logged_user()->isMemberOfOwnerCompany()) {
         return $this->getAllImportantMessages();
     }
     // if
     if (is_null($this->important_messages)) {
         $this->important_messages = ProjectMessages::getImportantProjectMessages($this, false);
     }
     // if
     return $this->important_messages;
 }
Example #28
0
<?php 

$panel = TabPanels::instance()->findById('messages-panel');
if ($panel instanceof TabPanel && $panel->getEnabled()) {
	$limit = 5 ;
	$result =  ProjectMessages::instance()->listing(array(
		"order" => "name",
		"order_dir" => "asc",
		"start" => 0,
		"limit" => $limit
	)) ;
	
	$active_members = array();
	$context = active_context();
	foreach ($context as $selection) {
		if ($selection instanceof Member) $active_members[] = $selection;
	}
	if (count($active_members) > 0) {
		$mnames = array();
		$allowed_contact_ids = array();
		foreach ($active_members as $member) {
			$mnames[] = clean($member->getName());
		}
		$widget_title = lang('notes'). ' '. lang('in').' '. implode(", ", $mnames);
	}
		
	$total = $result->total ;
	$messages = $result->objects;
	$genid = gen_id();
	if ($total) {
		include_once 'template.php';
 /**
  * Delete this object and reset all relationship. This function will not delete any of related objec
  *
  * @access public
  * @param void
  * @return boolean
  */
 function delete()
 {
     try {
         DB::execute("UPDATE " . ProjectMessages::instance()->getTableName(true) . " SET `milestone_id` = '0' WHERE `milestone_id` = " . DB::escape($this->getId()));
         DB::execute("UPDATE " . ProjectTaskLists::instance()->getTableName(true) . " SET `milestone_id` = '0' WHERE `milestone_id` = " . DB::escape($this->getId()));
         return parent::delete();
     } catch (Exception $e) {
         throw $e;
     }
     // try
 }
 /**
  * This function will return paginated result. Result is an array where first element is
  * array of returned object and second populated pagination object that can be used for
  * obtaining and rendering pagination data using various helpers.
  *
  * Items and pagination array vars are indexed with 0 for items and 1 for pagination
  * because you can't use associative indexing with list() construct
  *
  * @access public
  * @param array $arguments Query argumens (@see find()) Limit and offset are ignored!
  * @param integer $items_per_page Number of items per page
  * @param integer $current_page Current page number
  * @return array
  */
 function paginate($arguments = null, $items_per_page = 10, $current_page = 1)
 {
     if (isset($this) && instance_of($this, 'ProjectMessages')) {
         return parent::paginate($arguments, $items_per_page, $current_page);
     } else {
         return ProjectMessages::instance()->paginate($arguments, $items_per_page, $current_page);
         //$instance =& ProjectMessages::instance();
         //return $instance->paginate($arguments, $items_per_page, $current_page);
     }
     // if
 }