Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 6388 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3775 efrain 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
9
use Laminas\Mvc\Controller\AbstractActionController;
10
use Laminas\Log\LoggerInterface;
11
use Laminas\View\Model\ViewModel;
12
use Laminas\View\Model\JsonModel;
13
use LeadersLinked\Model\Page;
14
use LeadersLinked\Mapper\NotificationMapper;
15
use LeadersLinked\Mapper\CompanyMapper;
16
use LeadersLinked\Mapper\CompanyUserMapper;
17
use LeadersLinked\Model\Company;
18
use LeadersLinked\Mapper\PageMapper;
19
use LeadersLinked\Mapper\MessageMapper;
20
use LeadersLinked\Mapper\UserMapper;
21
use LeadersLinked\Mapper\UserProfileMapper;
22
use LeadersLinked\Mapper\CompanyUserRoleMapper;
23
use LeadersLinked\Model\Role;
24
use LeadersLinked\Library\Functions;
25
use LeadersLinked\Mapper\ConnectionMapper;
26
use LeadersLinked\Mapper\LocationMapper;
27
use LeadersLinked\Mapper\PostMapper;
28
use LeadersLinked\Mapper\ProfileVisitMapper;
29
use LeadersLinked\Model\Post;
30
use LeadersLinked\Mapper\UtilMapper;
31
use LeadersLinked\Mapper\FeedMapper;
32
use LeadersLinked\Model\Feed;
33
use LeadersLinked\Model\User;
34
use LeadersLinked\Model\Connection;
35
use LeadersLinked\Mapper\NetworkMapper;
36
use LeadersLinked\Mapper\ShorterMapper;
37
use LeadersLinked\Model\Shorter;
38
 
39
class ShorterController extends AbstractActionController
40
{
41
    /**
42
     *
43
     * @var AdapterInterface
44
     */
45
    private $adapter;
46
 
47
 
48
    /**
49
     *
50
     * @var AbstractAdapter
51
     */
52
    private $cache;
53
 
54
    /**
55
     *
56
     * @var  LoggerInterface
57
     */
58
    private $logger;
59
 
60
 
61
    /**
62
     *
63
     * @var array
64
     */
65
    private $config;
66
 
67
    /**
68
     *
69
     * @param AdapterInterface $adapter
70
     * @param AbstractAdapter $cache
71
     * @param LoggerInterface $logger
72
     * @param array $config
73
     */
74
    public function __construct($adapter, $cache, $logger,  $config)
75
    {
76
        $this->adapter      = $adapter;
77
        $this->cache        = $cache;
78
        $this->logger       = $logger;
79
        $this->config       = $config;
80
    }
81
 
82
 
83
 
84
    public function indexAction()
85
    {
86
 
87
        $code = $this->params()->fromRoute('code');
88
        $shorterMapper = ShorterMapper::getInstance($this->adapter);
89
        $shorter = $shorterMapper->fetchOneByUuid($code);
90
 
91
        if(!$shorter || $shorter->status == Shorter::STATUS_INACTIVE) {
92
            $response = $this->getResponse();
93
            $response->setStatusCode(404);
94
            return $response;
95
        }
96
 
97
        return $this->redirect()->toUrl($shorter->url);
98
 
99
    }
100
 
101
    public function generateAction()
102
    {
103
        $currentUserPlugin = $this->plugin('currentUserPlugin');
104
        $currentUser = $currentUserPlugin->getUser();
105
 
106
 
107
        $code = $this->params()->fromRoute('code');
108
        $type = $this->params()->fromRoute('type');
109
 
110
        $timestamp = time();
111
 
112
        list($usec, $sec) = explode(' ', microtime());
113
        $seed = intval($sec + ((float) $usec * 100000));
114
        mt_srand($seed, MT_RAND_MT19937);
115
        $rand =  mt_rand();
116
 
117
 
118
        if($type == 'feed') {
119
 
120
            $feedMapper = FeedMapper::getInstance($this->adapter);
121
            $feed = $feedMapper->fetchOneByUuidAnyStatus($code);
122
            if(!$feed) {
123
                return new JsonModel([
124
                    'success' => false,
125
                    'data' => 'ERROR_FEED_NOT_FOUND'
126
                ]);
127
            }
128
 
129
            $target =  $currentUser->uuid . '-feed-' . $feed->uuid;
130
            $password  = md5('user-' . $currentUser->uuid . '-feed-' . $feed->uuid . '-timestamp-' . $timestamp . '-rand-' . $rand . '-share-key-' . $currentUser->share_key) ;
131
 
132
        } else {
133
 
134
            $postMapper = PostMapper::getInstance($this->adapter);
135
            $post = $postMapper->fetchOneByUuidAnyStatus($code);
136
            if(!$post) {
137
                return new JsonModel([
138
                    'success' => false,
139
                    'data' => 'ERROR_POST_NOT_FOUND'
140
                ]);
141
 
142
            }
143
 
144
            $target =  $currentUser->uuid . '-post-' . $post->uuid;
145
            $password  = md5('user-' . $currentUser->uuid . '-post-' . $post->uuid . '-timestamp-' . $timestamp . '-rand-' . $rand . '-share-key-' . $currentUser->share_key) ;
146
        }
147
 
148
 
149
        $shorterMapper = ShorterMapper::getInstance($this->adapter);
150
        $shorter = $shorterMapper->fetchOneByTarget($target);
151
        if(!$shorter) {
152
 
153
 
154
            if($type == 'feed') {
155
                $share_params = [
156
                    'type' => 'feed',
157
                    'code' => $feed->uuid,
158
                    'user' => $currentUser->uuid,
159
                    'timestamp' => $timestamp,
160
                    'rand' => $rand,
161
                    'password' => $password,
162
                ];
163
            } else {
164
                $share_params = [
165
                    'type' => 'post',
166
                    'code' => $post->uuid,
167
                    'user' => $currentUser->uuid,
168
                    'timestamp' => $timestamp,
169
                    'rand' => $rand,
170
                    'password' => $password,
171
                ];
172
            }
173
 
174
 
175
 
176
 
177
            $url = $this->url()->fromRoute('share', $share_params  , ['force_canonical' => true]);
178
 
179
 
180
            $shorter = new Shorter();
181
            $shorter->status = Shorter::STATUS_ACTIVE;
182
            $shorter->target = $target;
183
            $shorter->url = $url;
184
 
185
            if(!$shorterMapper->insert($shorter)) {
186
                return new JsonModel([
187
                    'success' => false,
188
                    'data' => $shorterMapper->getError()
189
                ]);
190
            }
191
 
192
            $shorter = $shorterMapper->fetchOne($shorter->id);
193
 
194
        }
195
 
196
 
197
        return new JsonModel([
198
            'success' => true,
199
            'data' => $url = $this->url()->fromRoute('shorter', ['code' => $shorter->uuid ]  , ['force_canonical' => true]),
200
        ]);
201
    }
202
 
203
 
204
 
205
 
206
}