1: <?php
2:
3:
4: if(!isset($config)) {
5: require_once '../util/AlphaConfig.inc';
6: $config = AlphaConfig::getInstance();
7:
8: require_once $config->get('app.root').'alpha/util/AlphaAutoLoader.inc';
9: }
10:
11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55:
56: class EditArticle extends AlphaController implements AlphaControllerInterface {
57: 58: 59: 60: 61: 62:
63: protected $BO;
64:
65: 66: 67: 68: 69: 70:
71: private static $logger = null;
72:
73: 74: 75: 76: 77:
78: public function __construct() {
79: self::$logger = new Logger('EditArticle');
80: self::$logger->debug('>>__construct()');
81:
82: global $config;
83:
84:
85: parent::__construct('Standard');
86:
87: $this->BO = new ArticleObject();
88:
89: self::$logger->debug('<<__construct');
90: }
91:
92: 93: 94: 95: 96: 97:
98: public function doGET($params) {
99: self::$logger->debug('>>doGET(params=['.var_export($params, true).'])');
100:
101: try{
102:
103: if (isset($params['oid'])) {
104: if(!AlphaValidator::isInteger($params['oid']))
105: throw new IllegalArguementException('Article ID provided ['.$params['oid'].'] is not valid!');
106:
107: $this->BO->load($params['oid']);
108:
109: AlphaDAO::disconnect();
110:
111: $BOView = AlphaView::getInstance($this->BO);
112:
113:
114: $this->setTitle($this->BO->get('title').' (editing)');
115: $this->setDescription('Page to edit '.$this->BO->get('title').'.');
116: $this->setKeywords('edit,article');
117:
118: echo AlphaView::displayPageHead($this);
119:
120: echo $BOView->editView();
121: }else{
122: throw new IllegalArguementException('No valid article ID provided!');
123: }
124: }catch(IllegalArguementException $e) {
125: self::$logger->error($e->getMessage());
126: }catch(BONotFoundException $e) {
127: self::$logger->warn($e->getMessage());
128: echo '<div class="ui-state-error ui-corner-all" style="padding: 0pt 0.7em;">
129: <p><span class="ui-icon ui-icon-alert" style="float: left; margin-right: 0.3em;"></span>
130: <strong>Error:</strong> Failed to load the requested article from the database!</p></div>';
131: }
132:
133: echo AlphaView::renderDeleteForm();
134:
135: echo AlphaView::displayPageFoot($this);
136:
137: self::$logger->debug('<<doGET');
138: }
139:
140: 141: 142: 143: 144: 145:
146: public function doPOST($params) {
147: self::$logger->debug('>>doPOST(params=['.var_export($params, true).'])');
148:
149: global $config;
150:
151: try {
152:
153: if(!$this->checkSecurityFields()) {
154: throw new SecurityException('This page cannot accept post data from remote servers!');
155: self::$logger->debug('<<doPOST');
156: }
157:
158: if(isset($params['markdownTextBoxRows']) && $params['markdownTextBoxRows'] != '') {
159: $viewState = ViewState::getInstance();
160: $viewState->set('markdownTextBoxRows', $params['markdownTextBoxRows']);
161: }
162:
163: if (isset($params['oid'])) {
164: if(!AlphaValidator::isInteger($params['oid']))
165: throw new IllegalArguementException('Article ID provided ['.$params['oid'].'] is not valid!');
166:
167: $this->BO->load($params['oid']);
168:
169: $BOView = AlphaView::getInstance($this->BO);
170:
171:
172: $this->setTitle($this->BO->get('title').' (editing)');
173: $this->setDescription('Page to edit '.$this->BO->get('title').'.');
174: $this->setKeywords('edit,article');
175:
176: echo AlphaView::displayPageHead($this);
177:
178: if (isset($params['saveBut'])) {
179:
180:
181: $this->BO->populateFromPost();
182:
183: try {
184: $success = $this->BO->save();
185: self::$logger->action('Article '.$this->BO->getID().' saved');
186: echo AlphaView::displayUpdateMessage('Article '.$this->BO->getID().' saved successfully.');
187: }catch (LockingException $e) {
188: $this->BO->reload();
189: echo AlphaView::displayErrorMessage($e->getMessage());
190: }
191:
192: AlphaDAO::disconnect();
193: echo $BOView->editView();
194: }
195:
196: if (!empty($params['deleteOID'])) {
197:
198: $this->BO->load($params['deleteOID']);
199:
200: try {
201: $this->BO->delete();
202: self::$logger->action('Article '.$params['deleteOID'].' deleted.');
203: AlphaDAO::disconnect();
204:
205: echo AlphaView::displayUpdateMessage('Article '.$params['deleteOID'].' deleted successfully.');
206:
207: echo '<center>';
208:
209: $temp = new Button("document.location = '".FrontController::generateSecureURL('act=ListAll&bo='.get_class($this->BO))."'",
210: 'Back to List','cancelBut');
211: echo $temp->render();
212:
213: echo '</center>';
214: }catch(AlphaException $e) {
215: self::$logger->error($e->getTraceAsString());
216: echo AlphaView::displayErrorMessage('Error deleting the article, check the log!');
217: }
218: }
219:
220: if(isset($params['uploadBut'])) {
221:
222:
223: $success = move_uploaded_file($_FILES['userfile']['tmp_name'], $this->BO->getAttachmentsLocation().'/'.$_FILES['userfile']['name']);
224:
225: if(!$success)
226: throw new AlphaException('Could not move the uploaded file ['.$_FILES['userfile']['name'].']');
227:
228:
229: $success = chmod($this->BO->getAttachmentsLocation().'/'.$_FILES['userfile']['name'], 0666);
230:
231: if (!$success)
232: throw new AlphaException('Unable to set read/write permissions on the uploaded file ['.$this->BO->getAttachmentsLocation().'/'.$_FILES['userfile']['name'].'].');
233:
234: if($success) {
235: echo AlphaView::displayUpdateMessage('File uploaded successfully.');
236: self::$logger->action('File '.$_FILES['userfile']['name'].' uploaded to '.$this->BO->getAttachmentsLocation().'/'.$_FILES['userfile']['name']);
237: }
238:
239: $view = AlphaView::getInstance($this->BO);
240:
241: echo $view->editView();
242: }
243:
244: if (!empty($params['file_to_delete'])) {
245:
246: $success = unlink($this->BO->getAttachmentsLocation().'/'.$params['file_to_delete']);
247:
248: if(!$success)
249: throw new AlphaException('Could not delete the file ['.$params['file_to_delete'].']');
250:
251: if($success) {
252: echo AlphaView::displayUpdateMessage($params['file_to_delete'].' deleted successfully.');
253: self::$logger->action('File '.$this->BO->getAttachmentsLocation().'/'.$params['file_to_delete'].' deleted');
254: }
255:
256: $view = AlphaView::getInstance($this->BO);
257:
258: echo $view->editView();
259: }
260: }else{
261: throw new IllegalArguementException('No valid article ID provided!');
262: }
263: }catch(SecurityException $e) {
264: echo AlphaView::displayErrorMessage($e->getMessage());
265: self::$logger->warn($e->getMessage());
266: }catch(IllegalArguementException $e) {
267: echo AlphaView::displayErrorMessage($e->getMessage());
268: self::$logger->error($e->getMessage());
269: }catch(BONotFoundException $e) {
270: self::$logger->warn($e->getMessage());
271: echo AlphaView::displayErrorMessage('Failed to load the requested article from the database!');
272: }catch(AlphaException $e) {
273: echo AlphaView::displayErrorMessage($e->getMessage());
274: self::$logger->error($e->getMessage());
275: }
276:
277: echo AlphaView::renderDeleteForm();
278:
279: echo AlphaView::displayPageFoot($this);
280:
281: self::$logger->debug('<<doPOST');
282: }
283:
284: 285: 286: 287: 288: 289:
290: public function during_displayPageHead_callback() {
291: global $config;
292:
293: $fieldid = ($config->get('security.encrypt.http.fieldnames') ? 'text_field_'.base64_encode(AlphaSecurityUtils::encrypt('content')).'_0' : 'text_field_content_0');
294:
295: $html = '
296: <script type="text/javascript">
297: $(document).ready(function() {
298: $(\'[id="'.$fieldid.'"]\').pagedownBootstrap({
299: \'sanatize\': false
300: });
301: });
302: </script>';
303:
304: return $html;
305: }
306:
307: 308: 309: 310: 311: 312:
313: public function after_displayPageHead_callback() {
314: $menu = '';
315:
316: if (isset($_SESSION['currentUser']) && AlphaDAO::isInstalled() && $_SESSION['currentUser']->inGroup('Admin') && mb_strpos($_SERVER['REQUEST_URI'], '/tk/') !== false) {
317: $menu .= AlphaView::loadTemplateFragment('html', 'adminmenu.phtml', array());
318: }
319:
320: return $menu;
321: }
322: }
323:
324:
325: if(basename($_SERVER['PHP_SELF']) == 'EditArticle.php') {
326: $controller = new EditArticle();
327:
328: if(!empty($_POST)) {
329: $controller->doPOST($_REQUEST);
330: }else{
331: $controller->doGET($_GET);
332: }
333: }
334:
335: ?>