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: $html = '
294: <script type="text/javascript">
295: var previewURL = "'.FrontController::generateSecureURL('act=PreviewArticle&bo=ArticleObject&oid='.$this->BO->getOID()).'";
296: </script>
297: <script type="text/javascript" src="'.$config->get('app.url').'alpha/lib/markitup/jquery.markitup.js"></script>
298: <script type="text/javascript" src="'.$config->get('app.url').'alpha/lib/markitup/sets/markdown/set.js"></script>
299: <link rel="stylesheet" type="text/css" href="'.$config->get('app.url').'alpha/lib/markitup/skins/simple/style.css" />
300: <link rel="stylesheet" type="text/css" href="'.$config->get('app.url').'alpha/lib/markitup/sets/markdown/style.css" />
301: <script type="text/javascript">
302: $(document).ready(function() {
303: $(\'[id="'.($config->get('security.encrypt.http.fieldnames') ? 'text_field_'.base64_encode(AlphaSecurityUtils::encrypt('content')).'_0' : 'text_field_content_0').'"]\').markItUp(mySettings);
304:
305: var dialogCoords = [(screen.width/2)-400, (screen.height/2)-300];
306:
307: var dialogOpts = {
308: title: "Help Page",
309: modal: true,
310: resizable: false,
311: draggable: false,
312: autoOpen: false,
313: height: 400,
314: width: 800,
315: position: dialogCoords,
316: buttons: {},
317: open: function() {
318: //display correct dialog content
319: $("#helpPage").load("'.FrontController::generateSecureURL('act=ViewArticleFile&file=Markdown_Help.text').'");
320: },
321: close: function() {
322:
323: $("#helpPage").dialog(dialogOpts);
324:
325: $(".markItUpButton15").click(
326: function (){
327: $("#helpPage").dialog("open");
328: return false;
329: }
330: );
331: }
332: };
333:
334: $("#helpPage").dialog(dialogOpts);
335:
336: $(".markItUpButton15").click(
337: function (){
338: $("#helpPage").dialog("open");
339: return false;
340: }
341: );
342: });
343: </script>';
344:
345: return $html;
346: }
347:
348: 349: 350: 351: 352: 353:
354: public function after_displayPageHead_callback() {
355: $menu = '';
356:
357: if (isset($_SESSION['currentUser']) && AlphaDAO::isInstalled() && $_SESSION['currentUser']->inGroup('Admin') && strpos($_SERVER['REQUEST_URI'], '/tk/') !== false) {
358: $menu .= AlphaView::loadTemplateFragment('html', 'adminmenu.phtml', array());
359: }
360:
361: return $menu;
362: }
363: }
364:
365:
366: if(basename($_SERVER['PHP_SELF']) == 'EditArticle.php') {
367: $controller = new EditArticle();
368:
369: if(!empty($_POST)) {
370: $controller->doPOST($_REQUEST);
371: }else{
372: $controller->doGET($_GET);
373: }
374: }
375:
376: ?>