Proyectos de Subversion LeadersLinked - Services

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Db\Adapter\AdapterInterface;
7
 
8
use Laminas\Mvc\Controller\AbstractActionController;
9
use Laminas\Log\LoggerInterface;
59 efrain 10
use LeadersLinked\Library\Functions;
1 efrain 11
 
12
 
13
class StorageController extends AbstractActionController
14
{
15
    /**
16
     *
17
     * @var \Laminas\Db\Adapter\AdapterInterface
18
     */
19
    private $adapter;
20
 
21
    /**
22
     *
23
     * @var \LeadersLinked\Cache\CacheInterface
24
     */
25
    private $cache;
26
 
27
 
28
    /**
29
     *
30
     * @var \Laminas\Log\LoggerInterface
31
     */
32
    private $logger;
33
 
34
    /**
35
     *
36
     * @var array
37
     */
38
    private $config;
39
 
40
 
41
    /**
42
     *
43
     * @var \Laminas\Mvc\I18n\Translator
44
     */
45
    private $translator;
46
 
47
 
48
    /**
49
     *
50
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
51
     * @param \LeadersLinked\Cache\CacheInterface $cache
52
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
53
     * @param array $config
54
     * @param \Laminas\Mvc\I18n\Translator $translator
55
     */
56
    public function __construct($adapter, $cache, $logger, $config, $translator)
57
    {
58
        $this->adapter      = $adapter;
59
        $this->cache        = $cache;
60
        $this->logger       = $logger;
61
        $this->config       = $config;
62
        $this->translator   = $translator;
63
    }
64
 
65
    public function downloadAction()
66
    {
67
 
68
 
69
        // Get the file name from GET variable.
70
        $code       = $this->params()->fromRoute('code', '');
71
        $fileName   = $this->params()->fromRoute('filename', '');
72
        $type       = $this->params()->fromRoute('type', 'user');
73
 
74
 
75
 
76
       // echo 'Code = '. $code . ' Filename = ' . $fileName . ' type = ' . $type; exit;
77
 
78
 
79
 
80
        $no_image = $this->config['leaderslinked.images_default.no_image'];
81
        $path = '';
82
        switch($type)
83
        {
84
            case 'user' :
85
                $no_image = $this->config['leaderslinked.images_default.user_image'];
86
                $path = $this->config['leaderslinked.fullpath.user'];
87
                break;
88
 
89
 
90
            case 'user-profile' :
91
                $no_image = $this->config['leaderslinked.images_default.user_profile'];
92
                $path = $this->config['leaderslinked.fullpath.user'];
93
                break;
94
 
95
            case 'user-cover' :
96
                $no_image = $this->config['leaderslinked.images_default.user_cover'];
97
                $path = $this->config['leaderslinked.fullpath.user'];
98
                break;
99
 
100
            case 'company' :
101
                $no_image = $this->config['leaderslinked.images_default.company_profile'];
102
                $path = $this->config['leaderslinked.fullpath.company'];
103
                break;
104
 
105
            case 'company-cover' :
106
                $no_image = $this->config['leaderslinked.images_default.company_cover'];
107
 
108
 
109
                $path = $this->config['leaderslinked.fullpath.company'];
110
                break;
111
 
112
            case 'group' :
113
                $no_image = $this->config['leaderslinked.images_default.group_profile'];
114
                $path = $this->config['leaderslinked.fullpath.group'];
115
                break;
116
 
117
            case 'group-cover' :
118
                $no_image = $this->config['leaderslinked.images_default.group_cover'];
119
                $path = $this->config['leaderslinked.fullpath.group'];
120
                break;
121
 
122
            case 'job' :
123
                $path = $this->config['leaderslinked.fullpath.job'];
124
                break;
125
 
126
            case 'chat' :
127
                $path = $this->config['leaderslinked.fullpath.chat'];
128
                break;
129
 
130
            case 'feed' :
131
                $path = $this->config['leaderslinked.fullpath.feed'];
132
                break;
133
 
134
            case 'post' :
135
                $path = $this->config['leaderslinked.fullpath.post'];
136
                break;
137
 
138
            case 'message' :
139
                $path = $this->config['leaderslinked.fullpath.message'];
140
                break;
141
 
142
            case 'microlearning-topic' :
143
                $path = $this->config['leaderslinked.fullpath.microlearning_topic'];
144
                break;
145
 
146
            case 'microlearning-capsule' :
147
                $path = $this->config['leaderslinked.fullpath.microlearning_capsule'];
148
                break;
149
 
150
            case 'microlearning-slide' :
151
                $path = $this->config['leaderslinked.fullpath.microlearning_slide'];
152
                break;
153
 
154
            case 'daily-pulse' :
155
                $path = $this->config['leaderslinked.fullpath.daily_pulse'];
156
                break;
157
 
158
            case 'engagement-reward' :
159
                $path = $this->config['leaderslinked.fullpath.engagement_reward'] ;
160
                break;
161
 
162
            case 'knowledge-area' :
163
                $path = $this->config['leaderslinked.fullpath.knowledge_area'] ;
164
                break;
165
 
166
            default :
167
                $path = $this->config['leaderslinked.fullpath.image'];
168
                break;
169
 
170
        }
171
        if($code && $fileName) {
172
            $request_fullpath = $path . $code . DIRECTORY_SEPARATOR . $fileName;
173
        } else {
174
            $request_fullpath = $no_image;
175
        }
176
 
177
 
178
        $extensions     = explode('.',$request_fullpath);
179
        $extension      = strtolower(trim($extensions[count($extensions)-1]));
180
        if ($extension=='jpg' || $extension=='jpeg' || $extension=='gif' || $extension == 'png') {
181
 
182
            if(empty($fileName) ||  !file_exists($request_fullpath )) {
183
                $request_fullpath =  $no_image;
184
            }
185
 
186
 
187
 
188
        }
189
 
190
 
115 efrain 191
 
1 efrain 192
 
193
        if(file_exists($request_fullpath)) {
194
 
114 efrain 195
 
196
 
1 efrain 197
            // Try to open file
198
            if (!is_readable($request_fullpath)) {
199
                return $this->getResponse()->setStatusCode(500);
200
            }
201
 
202
            // Get file size in bytes.
203
            $fileSize = filesize($request_fullpath);
204
 
205
            // Get MIME type of the file.
206
            $mimeType = mime_content_type($request_fullpath);
207
            if($mimeType===false) {
208
                $mimeType = 'application/octet-stream';
209
            }
210
 
211
            $fileContent = file_get_contents($request_fullpath);
212
 
213
            $response = $this->getResponse();
59 efrain 214
            Functions::addCrossSiteToResponse($response);
215
 
1 efrain 216
            $headers = $response->getHeaders();
59 efrain 217
 
1 efrain 218
            $headers->addHeaderLine('Content-type: ' . $mimeType);
219
            $headers->addHeaderLine('Content-length: ' . $fileSize);
220
 
221
            if($fileContent!==false) {
222
                $response->setContent($fileContent);
223
            } else {
224
                $this->getResponse()->setStatusCode(500);
225
                return;
226
            }
227
        } else {
115 efrain 228
            error_log('request_fullpath = ' . $request_fullpath);
229
 
1 efrain 230
            return $this->getResponse()->setStatusCode(404);
231
        }
232
 
233
        return $this->getResponse();
234
    }
235
 
236
}