diff --git a/lam/lib/modules/inetOrgPerson.inc b/lam/lib/modules/inetOrgPerson.inc index f7b74bd7..b1960f7b 100644 --- a/lam/lib/modules/inetOrgPerson.inc +++ b/lam/lib/modules/inetOrgPerson.inc @@ -1663,13 +1663,13 @@ class inetOrgPerson extends baseModule implements passwordService { if (!empty($_FILES['photoFile']['tmp_name'])) { $handle = fopen($_FILES['photoFile']['tmp_name'], "r"); $data = fread($handle, 100000000); + fclose($handle); if (!empty($this->moduleSettings['inetOrgPerson_jpegPhoto_maxSize'][0]) && (strlen($data) > (1024 * $this->moduleSettings['inetOrgPerson_jpegPhoto_maxSize'][0]))) { $errMsg = $this->messages['file'][3]; $errMsg[] = null; $errMsg[] = array($this->moduleSettings['inetOrgPerson_jpegPhoto_maxSize'][0]); return array($errMsg); } - fclose($handle); } elseif (isset($_POST['webcamData'])) { $data = $_POST['webcamData']; diff --git a/lam/lib/modules/windowsUser.inc b/lam/lib/modules/windowsUser.inc index ade505f0..e789b716 100644 --- a/lam/lib/modules/windowsUser.inc +++ b/lam/lib/modules/windowsUser.inc @@ -2087,9 +2087,33 @@ class windowsUser extends baseModule implements passwordService { $container->add(new htmlSubTitle(_('Upload image')), 12); $label = _('Photo file'); $container->add(new htmlResponsiveInputFileUpload('photoFile', $label, 'photoUpload'), 12); - $container->addVerticalSpacer('2rem'); - $container->addLabel(new htmlAccountPageButton(get_class($this), 'photo', 'upload', _('Upload'))); - $container->addField(new htmlAccountPageButton(get_class($this), 'attributes', 'back', _('Back'))); + $container->addVerticalSpacer('0.5rem'); + $container->addLabel(new htmlOutputText(' ', false)); + $container->addField(new htmlAccountPageButton(get_class($this), 'photo', 'upload', _('Upload'))); + $container->addVerticalSpacer('1rem'); + $webcamContent = new htmlResponsiveRow(); + $webcamContent->add(new htmlSubTitle(_('Use webcam')), 12); + $errorMessage = new htmlStatusMessage('ERROR', ''); + $errorMessage->setCSSClasses(array('hidden', 'lam-webcam-message')); + $webcamContent->add($errorMessage, 12); + $captureButton = new htmlButton('lam-webcam-capture', _('Start capture')); + $captureButton->setOnClick('window.lam.tools.webcam.capture(event);'); + $webcamContent->add($captureButton, 12, 12, 12, 'text-center'); + $video = new htmlVideo('lam-webcam-video'); + $video->setCSSClasses(array('hidden')); + $webcamContent->add($video, 12, 12, 12, 'text-center'); + $webcamContent->addVerticalSpacer('0.5rem'); + $webcamUploadButton = new htmlButton('uploadWebcam', _('Upload')); + $webcamUploadButton->setCSSClasses(array('btn-lam-webcam-upload', 'hidden')); + $webcamUploadButton->setOnClick('window.lam.tools.webcam.upload();'); + $webcamContent->add($webcamUploadButton, 12, 12, 12, 'text-center'); + $canvas = new htmlCanvas('lam-webcam-canvas'); + $canvas->setCSSClasses(array('hidden')); + $webcamContent->add($canvas, 12); + $webcamDiv = new htmlDiv('lam_webcam_div', $webcamContent, array('hidden')); + $container->add($webcamDiv, 12); + $container->addVerticalSpacer('1rem'); + $container->add(new htmlAccountPageButton(get_class($this), 'attributes', 'back', _('Back')), 12); } else { $container->add(new htmlSubTitle(_('Crop image')), 12); @@ -2115,7 +2139,7 @@ class windowsUser extends baseModule implements passwordService { if (isset($_POST['form_subpage_' . get_class($this) . '_attributes_back'])) { return array(); } - if (isset($_POST['form_subpage_' . get_class($this) . '_photo_upload'])) { + if (isset($_POST['form_subpage_' . get_class($this) . '_photo_upload']) || isset($_POST['webcamData'])) { return $this->uploadPhoto(); } if (isset($_POST['form_subpage_' . get_class($this) . '_attributes_crop'])) { @@ -2142,40 +2166,46 @@ class windowsUser extends baseModule implements passwordService { */ private function uploadPhoto() { $messages = array(); - if ($_FILES['photoFile'] && ($_FILES['photoFile']['size'] > 0)) { + if ((empty($_FILES['photoFile']) || ($_FILES['photoFile']['size'] <= 0)) && empty($_POST['webcamData'])) { + $messages[] = $this->messages['file'][0]; + return $messages; + } + if (!empty($_FILES['photoFile']['tmp_name'])) { $handle = fopen($_FILES['photoFile']['tmp_name'], "r"); $data = fread($handle, 10000000); + fclose($handle); if (!empty($this->moduleSettings['windowsUser_jpegPhoto_maxSize'][0]) && (strlen($data) > (1024 * $this->moduleSettings['windowsUser_jpegPhoto_maxSize'][0]))) { $errMsg = $this->messages['file'][3]; $errMsg[] = null; $errMsg[] = array($this->moduleSettings['windowsUser_jpegPhoto_maxSize'][0]); return array($errMsg); } - fclose($handle); - // convert to JPG - try { - include_once dirname(__FILE__) . '/../imageutils.inc'; - $imageManipulator = ImageManipulationFactory::getImageManipulator($data); - // resize if maximum values specified - if (!empty($this->moduleSettings['windowsUser_jpegPhoto_maxWidth'][0]) || !empty($this->moduleSettings['windowsUser_jpegPhoto_maxHeight'][0])) { - $maxWidth = empty($this->moduleSettings['windowsUser_jpegPhoto_maxWidth'][0]) ? $imageManipulator->getWidth() : $this->moduleSettings['windowsUser_jpegPhoto_maxWidth'][0]; - $maxHeight = empty($this->moduleSettings['windowsUser_jpegPhoto_maxHeight'][0]) ? $imageManipulator->getHeight() : $this->moduleSettings['windowsUser_jpegPhoto_maxHeight'][0]; - $imageManipulator->thumbnail($maxWidth, $maxHeight); - } - $imageManipulator->convertToJpeg(); - $data = $imageManipulator->getImageData(); - } - catch (Exception $e) { - $msg = $this->messages['file'][2]; - $msg[] = htmlspecialchars($e->getMessage()); - $messages[] = $msg; - return $messages; - } - $this->attributes['jpegPhoto'][0] = $data; } - else { - $messages[] = $this->messages['file'][0]; + elseif (isset($_POST['webcamData'])) { + $data = $_POST['webcamData']; + $data = str_replace('data:image/png;base64,', '', $data); + $data = base64_decode($data); } + // convert to JPG + try { + include_once dirname(__FILE__) . '/../imageutils.inc'; + $imageManipulator = ImageManipulationFactory::getImageManipulator($data); + // resize if maximum values specified + if (!empty($this->moduleSettings['windowsUser_jpegPhoto_maxWidth'][0]) || !empty($this->moduleSettings['windowsUser_jpegPhoto_maxHeight'][0])) { + $maxWidth = empty($this->moduleSettings['windowsUser_jpegPhoto_maxWidth'][0]) ? $imageManipulator->getWidth() : $this->moduleSettings['windowsUser_jpegPhoto_maxWidth'][0]; + $maxHeight = empty($this->moduleSettings['windowsUser_jpegPhoto_maxHeight'][0]) ? $imageManipulator->getHeight() : $this->moduleSettings['windowsUser_jpegPhoto_maxHeight'][0]; + $imageManipulator->thumbnail($maxWidth, $maxHeight); + } + $imageManipulator->convertToJpeg(); + $data = $imageManipulator->getImageData(); + } + catch (Exception $e) { + $msg = $this->messages['file'][2]; + $msg[] = htmlspecialchars($e->getMessage()); + $messages[] = $msg; + return $messages; + } + $this->attributes['jpegPhoto'][0] = $data; return $messages; }